首页 > 代码库 > 各种常见排序实现代码
各种常见排序实现代码
主要包括冒泡、简单选择、插入、堆排、归并、快排这几种。以后会慢慢补充。
可能有错,欢迎指出。
#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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。