当然桶排序的时间复杂度为O(n),但是需要牺牲巨大内存。
#include<iostream> using namespace std; void Merge(int a[],int f,int mid,int l,int b[]) { int s1=f,s2=mid+1; int k=f; while(s1<=mid&&s2<=l) { if(a[s1]<=a[s2]) { b[k]=a[s1]; k++; s1++; } else { b[k]=a[s2]; k++; s2++; } } while(s2<=l) { b[k]=a[s2]; k++; s2++; } while(s1<=mid) { b[k]=a[s1]; k++; s1++; } for(int i=f; i<=l; i++) a[i]=b[i]; } void Gui_sort(int a[],int f,int n,int b[]) { if(f<n) { int mid=(f+n)/2; Gui_sort(a,f,mid,b); Gui_sort(a,mid+1,n,b); Merge(a,f,mid,n,b); } } int main() { int a[5]= {3,1,5,4,2}; int b[5]; int n=4; Gui_sort(a,0,4,b); for(int i=0; i<5; i++) cout<<b[i]<<endl; return 0; }