#include <stdio.h> #define N 5 //从小到大 void bubbleSort(int p[]){ int i=0,j=0,min=0; for(i=0;i<N;i++) for(j=N-1;j>i;j--){ if(p[j]<p[j-1]){ min=p[j-1]; p[j-1]=p[j]; p[j]=min; } } } //从大到小 void bubbleSort2(int p[]){ int i=0,j=0,min=0; for(i=0;i<N-1;i++) for(j=i;j<N-1;j++){ if(p[j]<p[j+1]){ min=p[j]; p[j]=p[j+1]; p[j+1]=min; } } } //从小到大 void selectSort(int *p){ int i=0,j=0,temp=0,min=0; for(i=0;i<N-1;i++){ min=i; for(j=i+1;j<N;j++){ if(p[j]<p[min]){ min=j; } } if(min!=i){ temp=p[i]; p[i]=p[min]; p[min]=temp; } } } //从大到小 void selectSort2(int *p){ int i=0,j=0,temp=0,max=0; for(i=0;i<N-1;i++){ max=i; for(j=i+1;j<N;j++){ if(p[j]>p[max]){ max=j; } } if(max!=i){ temp=p[i]; p[i]=p[max]; p[max]=temp; } } } void insertSort(int p[]){ int i=0,j=0,temp=0; for(i=1;i<N;i++){ if(p[i]<p[i-1]) { temp=p[i]; for(j=i-1;temp<p[j]&&j>=0;j--) { p[j+1]=p[j]; } p[j+1]=temp; } } } void shellSort(int * p){ int i=0,j=0,temp=0; int increment=N-1; while(increment>1){ increment=increment/3+1; for(i=increment;i<N;i++){ if(p[i]<p[i-increment]){ temp=p[i]; for(j=i-increment;j>=0&&temp<p[j];j-=increment) p[j+increment]=p[j]; p[j+increment]=temp; } } } } void heapAdjust(int *p,int i,int j){ int lchild=2*i+1; int rchild=2*i+2; int max=i; int temp; if(i<=(N-1)/2){ if(lchild<=N-1&&p[lchild]>max) max=lchild; if(rchild<=N-1&&p[rchild>max]) max=rchild; if(max!=i) { temp=p[i]; p[i]=p[max]; p[max]=temp; heapAdjust(p,max,N-1); } } } void heapSort(int *p){ int i=0,temp=0; for(i=(N-1)/2;i>=0;i--){ heapAdjust(p,i,N-1); } for(i=N-1;i>=0;i--){ temp=p[i]; p[i]=p[0]; p[0]=temp; heapAdjust(p,0,i-1); } } void merge(int *p,int low,int mid,int high){ int i=low,j=mid+1,k=0; int array[10]; while(i<=mid&&j<=high){ array[k++]=p[i]<=p[j]?p[i++]:p[j++]; } while(i<=mid) array[k++]=p[i++]; while(j<=high) array[k++]=p[j++]; for(i=low,k=0;i<=high;k++,i++) p[i]=array[k]; } void mergeSort(int *p,int low,int high){ int mid; if(low<high){ mid=(low+high)/2; mergeSort(p,low,mid); mergeSort(p,mid+1,high); merge(p,low,mid,high); } } void quickSort(int p[],int left,int right){ int i,j,x,temp,k; if(left<right){ i=left-1; x=p[right]; for(j=left;j<right;j++){ if(p[j]<=x){ i++; temp=p[i];p[i]=p[j];p[j]=temp; } } temp=p[i+1];p[i+1]=x;p[right]=temp; quickSort(p,left,i); quickSort(p,i+2,right); } } //位图排序,时间复杂度O(n) void bitmapSort(){ int unsort[]={3,5,4,2,1,7,6,8,10,9}; int x=0,i=0; for(i=0;i<10;i++){ x=x|(0x01<<(unsort[i]%32)); } for(i=0;i<32;i++){ if((x&(0x01<<i))==(0x01<<i)) printf("%d ",i); } } void main(){ int unsort[]={4,3,5,6,1,2},i; quickSort(unsort,0,5); for(i=0;i<6;i++) printf("%d ",unsort[i]); bitmapSort(); }