二分查找、快速排序算法、插入排序

 1 /**********二分查找*****************/
 2 int half_find(int *num,int size, int a)
 3 {
 4     int i=0;
 5     int low=0;
 6     int high=size-1;
 7     int mid;//记录中间位置
 8     while(low<=high)
 9     {
10         mid = (low+high)/2;
11         if(num[mid] == a)
12             return mid;//返回所在位置
13         if(num[mid] > a)
14             high = mid-1;//减去大的那一半
15         if(num[mid] <a)
16             low = mid+1;//减去小的那半
17     }
18     return false;//没找到
19 }
20 /**********快速排序算法*****************/ 21 void QuickSort(char s[],int low,int high) 22 { 23 int i; 24 int last; //记录基准的位置 25 if(low<high) //当数组中的元素个数大于1时,才进行操作 26 { 27 last=low; //选取第一个元素作为基准 28 //把小于基准元与大于基准元的分开,last记录它们分开的界限 29 for(i=low+1;i<=high;i++) 30 { 31 if(s[i]<s[low]) 32 swap(s,++last,i); 33 } 34 35 swap(s,last,low);//基准元与界限交换,这样的话,基准元两边就是一边大于,一边小于; 36 QuickSort(s,low,last-1); //对左区间递归排序 37 QuickSort(s,last+1,high);//对右区间递归排序 38 } 39 } 40 /*交换数组中的两个元素*/ 41 void swap(char s[],int i,int j) 42 { 43 int temp; 44 temp=s[i]; 45 s[i]=s[j]; 46 s[j]=temp; 47 }
 1 /**********插入排序*****************/
 2 int insert_sort(int *num,int size)
 3 {
 4     for(int i=0;i<size;i++)
 5     {
 6         int j=0;
 7         while((num[j]<num[i])&&(j<i))//找到要插入的位置
 8         {
 9             j++;
10         }
11         if(i!=j)//相等则位置不用交换
12         {
13             int count = num[i];
14             for(int k=i;k>j;k--)
15             {
16                 num[k]= num[k-1];
17             }
18             num[j] = count;//插入
19         }
20     }
21 }



原文地址:https://www.cnblogs.com/mingyoujizao/p/9367769.html