前一阵子为了准备暑期实习笔试、面试,把维基上查到的常用的排序算法全写了一遍。基本是按照算法导论和维基上面的思路写的,有些算法的细节可能和一些书上有出入,但是思想是一样的。cpp文件在最后,代码如下:
#include #include #include #include #include using namespace std;#define SIZE 1000#define MIN -65536#define rm(x) (x>>1)#define lm(x) (x<<1)//二分查找int bi_search(int arr[],int value,int start,int end){ if(start==end){ if(arr[start]!=value) return -1; else return start; } if(start>end) return -1; else{ if(arr[(start+end)/2]==value) return (start+end)/2; else if(arr[(start+end)/2] i;j--){ if(arr[j] =0;j--){ if(temp =0;j--){ if(arr[j+1] =arr[j]&&j!=size)||i==size/2) temp[k++]=arr[j++]; } for(i=0;i
queue[10]; for(i=0;i
1;k--) id/=10; id%=10; queue[id].push_back(arr[j]); } for(j=0,k=0;j<10;j++){ while(queue[j].size()!=0){ arr[k++]=queue[j].front(); queue[j].pop_front(); } } }};//选择排序,不稳定void select_sort(int arr[],int size){ int i,j,min,value; for(i=0;i =1;i--) max_heapify(heap,i,size);};void heap_sort(int heap[],int size){ build_max_heap(heap,size); for(int i=size;i>=2;i--){ int temp=heap[1]; heap[1]=heap[i]; heap[i]=temp; size--; max_heapify(heap,1,size); }};//希尔排序,插入排序的加强版void insert(int arr[],int size,int step){ int i,j,temp; for(i=step;i =0;j-=step){ if(temp 0){ insert(arr,size,step); step/=2; }};void partition(int arr[],int end){ if(end<=0) return; int pivot=arr[end],left=-1,right=-1; for(int i=0;i pivot) right++; else{ left++; right++; int temp=arr[right]; arr[right]=arr[left]; arr[left]=temp; } } arr[end]=arr[left+1]; arr[left+1]=pivot; partition(arr,left); partition(arr+left+2,end-left-2);};void quick_sort(int arr[],int size){ partition(arr,size-1);};int main(){ int arr[SIZE],i=0,size,value=10; while(scanf("%d",&arr[i++])!=EOF){} size=i-1; //int result=bi_search(arr,value,0,size-1); //printf("%d\n",result); //buble_sort(arr,size); //insert_sort(arr,size); //merge_sort(arr,size); //radix_sort(arr,size); //select_sort(arr,size); //bucket_sort(arr,size); //heap_sort(arr,size);//从下标1开始 //shell_sort(arr,size); //quick_sort(arr,size); return 0;}