快速排序+查找

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5
 6 const int maxn=10000;
 7 int f[maxn];
 8 void swap(int &a,int &b){int t=a;a=b;b=t;}
 9
10 /*********************************************/
11 //所有l均为数组起始下标,所有r均为数组结束下标
12 void quicksort(int a[],int l,int r)//快速排序
13 {
14     if(l<r)
15     {
16         int t=a[l],i=l,j=r;
17         while(i!=j)
18         {
19             while(t<=a[j] && i<j) j--;
20             while(a[i]<=t && i<j) i++;
21             if(i<j) swap(a[i],a[j]);
22         }
23         a[l]=a[i];a[i]=t;
24         quicksort(a,l,i-1);
25         quicksort(a,i+1,r);
26     }
27 }
28
29 int binary_search(int a[],int l,int r,int val)//二分查找,未找到返回-1
30 {
31     int mid,ans=-1;
32     while(l<=r)
33     {
34         mid=(l+r)>>1;
35         if(val>a[mid]) l=mid+1;
36         else if(val==a[mid]) return mid;
37         else r=mid-1;
38     }
39     return ans;
40 }
41
42 int lower_bound(int a[],int l,int r,int val)//二分下界查找,无下界返回-1
43 {
44     int mid,ans=-1;
45     while(l<=r)
46     {
47         mid=(l+r)>>1;
48         if(a[mid]<=val) ans=mid,l=mid+1;
49         else r=mid-1;
50     }
51     return ans;
52 }
53
54 int upper_bound(int a[],int l,int r,int val)//二分上届查找,无上届返回-1
55 {
56     int mid,ans=-1;
57     while(l<=r)
58     {
59         mid=(l+r)>>1;
60         if(a[mid]>=val)  ans=mid,r=mid-1;
61         else l=mid+1;
62     }
63     return ans;
64 }
65 /*********************************************/
66
67 int main()
68 {
69     int i,n;
70     while(~scanf("%d",&n))
71     {
72         for(i=1;i<=n;i++) scanf("%d",f+i);
73         quicksort(f,1,n);
74         for(i=1;i<=n;i++) printf("%d ",f[i]);
75         puts("");
76         int t,p;
77         puts("5次二分查找");t=5;
78         while(t--){scanf("%d",&p);printf("%d\n",binary_search(f,1,n,p));}
79         puts("5次二分下界查找");t=5;
80         while(t--){scanf("%d",&p);printf("%d\n",lower_bound(f,1,n,p));}
81         puts("5次二分上界查找");t=5;
82         while(t--){scanf("%d",&p);printf("%d\n",upper_bound(f,1,n,p));}
83     }
84     return 0;
85 }
时间: 2024-08-19 05:17:19

快速排序+查找的相关文章

快速排序查找匹配元素最前面是否有对应得元素

$arr = [1,2,3,3,4,5,6]; function binSearch($arr,$num,$start,$end){ if($start > $end){ return -1; } $mid = floor(($start+$end)/2); $midValue = $arr[$mid]; if($num < $midValue){ $mid = $mid-1; return binSearch($arr,$num,$start,$mid); }elseif($num >

Python数据结构与算法—排序和查找

排序和查找 排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列. 常见排序方法: 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 1 # 冒泡 2 def bubble(list_): 3 # 外层循环表达比较多少轮 4 for i in range(len(list_) - 1): 5 #内层循环把控比较次数 6 for j in r

JavaScript数据结构和算法

前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java)提供的工具.这些工具包括传统的数据结构(如链表,栈,队列,图等),也包括传统的排序和查找算法.本文主要是总结什么情况下使用何种数据结构较好,并没有细讲里面的原理和实现方式,仅仅提供给阅读过<数据结构和算法>的同学作为总结和参考笔记,如果未细究过数据结构和算法的同学,本文也可以作为一个方向,希望能引

快速排序及折半查找

数据结构与算法---快速排序及折半查找: 1)编程实现数据序列的输入2)实现快速排序算法,并对输入的序列排序后输出: 3)实现折半查找算法,并在步骤(2)排序后的序列上,进行任意地查找,并输出查询结果.(查找成功/不成功:等于关键值的元素个数=1或>1) 1 #include <stdio.h> 2 #define N 100 3 4 //快速排序算法并输出 5 void Quick_Partition(double *r, int i, int j) 6 { 7 double x =

快速排序和折半查找

package BinarySerach; import java.util.Scanner; public class BinarySerch { /** *折半查找和快速排序 */ static final int N = 15; static void quickSort(int [] array,int left,int right){ int f,t; int ltemp =left; int rtemp = right; //确定分界值 f = array[(left+right)/

学习快速排序和二分查找算法

1. 快速排序的思想采用的是分治算法实现,从头选择一个元素是作为"哨兵元素",然后从尾部开始寻找一个比"哨兵元素"小的元素,然后跟它交换,接着从头开始寻找比"哨兵元素"大的:元素,然后交换,直到"哨兵元素"的左边都"哨兵元素"小,右边都比"哨兵元素"大为止,这算是一次划分,快速排序是要经过的 k-1趟(假设有k个元素)划分才能排序好所有的元素. 下面根据分治实现的java代码: publ

C语言练习题1(关于快速排序,二分查找与运行时间)

刚刚完成师兄给的一道题目: 随机生成10000位数,进行快速排序后,用二分查找法定位到某个要查询的数(键盘输入某个要查询的数),  结果输出查询的时间,以及是否查到 分享下自己的解题思路: 1,要懂得如何随机生成数 2,要了解快速排序以及二分法思想 3,要直到如何测试出程序运行时间 下面是自己写的代码,欢迎各位提出宝贵的意见以及见解,小生感激不尽 1 /* 2 本代码描述: 3 4 随机生成10000位数,进行快速排序后, 5 用二分查找法定位到某个要查询的数 6 (键盘输入某个要查询的数),

二分法查找和快速排序

二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数.子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有效的方法. 快速排序的实质也是二分法,下面就写一个快速排序+二分法查找的栗子??: 1 #include<stdio.h> 2 3 4 //快速排序 5 void QuickSort(int * a,int left,int right) 6 { 7 if(left>right) 8 { 9 return; 10

编程算法 - 快速排序(QuickSort)和二分查找(BinarySearch)

快速排序(QuickSort)和二分查找(BinarySearch) 本文地址: http://blog.csdn.net/caroline_wendy 快速排序和二分查找的定义, 网上书上都有, 本文主要是讲解如何写出这两个经典算法. 程序员必须掌握的两种算法, 使用任何语言, 使用纸都是必须的. 快速排序(C): /* * main.cpp * * Created on: 2014年9月10日 * Author: Spike */ #include <stdio.h> #include &