主要包括冒泡、简单选择、插入、堆排、归并、快排这几种。以后会慢慢补充。
可能有错,欢迎指出。
#include<iostream> #include<cstdio> using namespace std; //升序 int arr[10000],length; //冒泡排序 void Bubble_Sort(int *Arr,int length) { bool update; while(1) { update=false; for(int i=0; i<length-1; ++i) if(Arr[i]>Arr[i+1]) { int temp=Arr[i]; Arr[i]=Arr[i+1]; Arr[i+1]=temp; update=true; } if(!update) break; } } //简单选择排序 void SimpleEelect_Sort(int *Arr,int length) { for(int i=0; i<length; ++i) { int minn=i; for(int j=i+1; j<length; ++j) if(Arr[j]<Arr[minn]) minn=j; if(minn!=i) { int temp=Arr[i]; Arr[i]=Arr[minn]; Arr[minn]=temp; } } } //直接插入排序 void Insert_Sort(int *Arr,int length) { for(int i=1; i<length; ++i) { int key=Arr[i]; int j; for(j=i-1; j>=0; --j) { if(Arr[j]<=key) break; else Arr[j+1]=Arr[j]; } Arr[j+1]=key; } } //堆排 void HeapAdjust(int *Arr,int rt,int length) { int largest=rt; int key=Arr[rt]; while(1) { int lc=rt*2+1,rc=rt*2+2; if(lc<length&&Arr[lc]>Arr[largest]) largest=lc; if(rc<length&&Arr[rc]>Arr[largest]) largest=rc; if(largest==rt) break; Arr[rt]=Arr[largest]; Arr[largest]=key; rt=largest; } } void HeapBuild(int *Arr,int length) { for(int i=(length-1)/2; i>=0; --i) HeapAdjust(Arr,i,length); } void Heap_Sort(int *Arr,int length) { HeapBuild(Arr,length); for(int i=length-1; i>=1; --i) { int temp=Arr[i]; Arr[i]=Arr[0]; Arr[0]=temp; HeapAdjust(Arr,0,i); } } //归并排序 int A[10000]; void Merge_Sort(int *Arr,int L,int R) { if(L<R) { int M=(L+R)/2; Merge_Sort(Arr,L,M); Merge_Sort(Arr,M+1,R); int p=L,q=M+1,i=L; while(p<=M||q<=R) { if(q>R||(p<=M&&Arr[p]<=Arr[q])) A[i++]=Arr[p++]; else A[i++]=Arr[q++]; } for(int j=L; j<=R; ++j) Arr[j]=A[j]; } } //快速排序 int partition(int *Arr,int L,int R) { int key=Arr[R]; int i=L-1; for(int j=L; j<=R; ++j) if(Arr[j]<=key) { i++; int temp=Arr[j]; Arr[j]=Arr[i]; Arr[i]=temp; } return i; } void Quick_Sort(int *Arr,int L,int R) { if(L<R) { int mid=partition(Arr,L,R); Quick_Sort(Arr,L,mid-1); Quick_Sort(Arr,mid+1,R); } } void read() { scanf("%d",&length); for(int i=0; i<length; ++i) scanf("%d",&arr[i]); } void output() { for(int i=0; i<length; ++i) printf("%d ",arr[i]); printf("\n"); } int main() { read(); Quick_Sort(arr,0,length-1); output(); return 0; }
各种常见排序实现代码
时间: 2024-10-08 02:50:09