标签:
排序算法就像是数字信号里边的傅里叶变换一样基础,在此继续温习一遍。
void change_integer(int *p1, int *p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; } int partion(int arr[], int length, int start, int end) { int index = rand()%(end-start+1) + start; change_integer(arr+index, arr+end); int small_pos = start-1; for(int i=start; i<end; ++i) { if(arr[i] < arr[end]) { ++small_pos; change_integer(arr+small_pos, arr+i); } } ++small_pos; change_integer(arr+small_pos, arr+end); return small_pos; } void quick_sort(int a[], int length, int start, int end) { if(start == end) return ; int index = partion(a, length, start, end); if(index > start) { quick_sort(a, length, start, index-1); } if(index < end) { quick_sort(a, length, index+1, end); } }
这里其实参考了《剑指offer》这本书里边的代码,但是书中交换部分部分代码如下
if(arr[i] < arr[end])
{
++small_pos;
if(small_pos != i)
change_integer(arr+small_pos, arr+i);
}
不太理解这里为什么判断small_pos != i,个人觉得多余了。
标签:
原文地址:http://www.cnblogs.com/bestwangjie/p/5521547.html