1 快速排序
http://blog.csdn.net/morewindows/article/details/6684558 这篇博客介绍的非常清晰易懂了。主要就是挖坑,填坑+分治法策略。笔者这里就只贴出代码来
1 void QuickSortCore(int arr[],int start,int end) 2 { 3 int i=start,j=end; 4 //以起点为基准值,先挖一个坑,需要用一个比x小的值来填i坑 5 int x=arr[i]; 6 while (i<j) 7 { 8 //从后向前寻找比x小的值 9 while (i<j&&arr[j]>=x) 10 { 11 j--; 12 } 13 //填i的坑,等于挖了j的元素到i,需要一个比x大的数来填j的坑 14 if (i<j) 15 { 16 arr[i++]=arr[j]; 17 } 18 19 //从前向后寻找比x大的值 20 while (j>i&&arr[i]<x) 21 { 22 i++; 23 } 24 //填j的坑,等于挖了i的元素到j,需要一个比x大的数来填i的坑 25 if (i<j) 26 { 27 arr[j--]=arr[i]; 28 } 29 30 } 31 //基准值调整到中间,一趟快排以后使得x前面的数都小于x,x后面的数都大于等于x 32 arr[i]=x; 33 34 if (start<(i-1)) 35 { 36 QuickSortCore(arr,start,i-1); 37 } 38 if (end>(i+1)) 39 { 40 QuickSortCore(arr,i+1,end); 41 } 42 43 } 44 45 void QuickSort(int arr[],int len) 46 { 47 if (arr==NULL||len<=0) 48 throw std::exception("Invalid input."); 49 50 int reserve_num=0; 51 QuickSortCore(arr,0,len-1); 52 53 for (int i=0;i<len;i++) 54 { 55 cout<<arr[i]<<‘ ‘; 56 } 57 cout<<endl; 58 }
时间: 2024-10-13 06:38:49