我目前最常用的两种排序:冒泡排序和快速排序
比较一下他们的性能:
1 #include<stdio.h> 2 3 void QuickSort(int * a,int left,int right) 4 { 5 if(left>right) 6 { 7 return; 8 } 9 int stand=a[left]; 10 int i=left; 11 int j=right; 12 //得到基准数位置 13 while(i!=j) 14 { 15 while(i<j&&a[j]>=stand) 16 { 17 --j; 18 } 19 while(i<j&&a[i]<=stand) 20 { 21 ++i; 22 } 23 if(i<j) 24 { 25 int temp=a[i]; 26 a[i]=a[j]; 27 a[j]=temp; 28 } 29 } 30 //将基准数放入找出的位置 31 a[left]=a[i]; 32 a[i]=stand; 33 //递归处理 34 QuickSort(a,left,i-1); 35 QuickSort(a,i+1,right); 36 return; 37 } 38 39 void BubbleSort(int * a,int n) 40 { 41 for(int i=0;i<n-1;i++) 42 { 43 for(int j=0;j<n-i-1;j++) 44 { 45 if(a[j]>a[j+1]) 46 { 47 int temp=a[j]; 48 a[j]=a[j+1]; 49 a[j+1]=temp; 50 } 51 } 52 } 53 } 54 55 int main() 56 { 57 int * a=new int[10000]; 58 for(int i=0;i<10000;i++) 59 { 60 a[i]=10000-i; 61 } 62 QuickSort(a,0,9999); 63 //BubbleSort(a,9999); 64 /* for(int i=0;i<10000;i++) 65 { 66 printf("%d\n",a[i]); 67 } */ 68 return 0; 69 }
运行结果显示:
在数据量较小时冒泡排序和快速排序性能差不多,冒泡有时性能还会更高些,可能是因为快排用的递归要函数出入栈的原因。。。。。。
但随着数据量的增大,快速排序的性能会比冒泡高得多。
数组长度为10000时排序耗时(以最复杂情况测试)
快速排序:
冒泡排序: