左轴演算、中轴演算、右轴演算
题目:
高速排序法(quick sort)是眼下所公认最快的排序方法之中的一个(视解题的对象而定),尽管高速排序法在最差状况下能够达O(n2)。可是在多数的情况下,高速排序法的效率表现是相当不错的。
高速排序 - 算法
1、高速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二
2、分别对左边与右边数列进行排序
左轴演算:
// 高速排序 - 左轴演算// 1. 附设两个指针left/right,并设最左端的数为最初枢轴pivot// 2. 从右向左搜索,找到第一个比pivot小的数,将其缓存进枢轴位置// 3. 从左向右搜索,找到第一个比pivot大的数。缓存进上一个比pivot小的数的位置程式进入2.循环// 4. 最后一次交换后获得的有效空位置为a[i] ,此时再将pivot赋值给a[i] 此时a[i]左边的数比a[i]小,右边的数比a[i]大// 再分别对其左边与左边进行高速排序int QuickSort2(int a[],int left,int right){ if(left=pivotloc) j--; if(i
int QuickSort5(int a[],int left,int right){ if(left中轴演算pivotloc) j--; if(i
// 高速排序int QuickSort3(int a[],int left,int right){ int i,j,pivot; if(leftpivot) ; if(i
右轴演算
// 高速排序演算// 1. 首先选择最右边的元素作为枢轴pivot// 2. 从左向右搜索,寻找小于pivot的数,将其与左边第一个未交换的元素交换// 3. 当搜索到最右边时,左边已交换的数都比pivot小。而未交换的都比pivot大// 4. 将左边的第一个未交换的元素与最右边的pivot元素交换,并返回该未交换元素的索引// 此时i左边的元素比i小,右边的比i大// 程式进入.循环分别对0 →i -1 及最右边的i+1→right进行递归(高速排序) 终于该序列会变为有序int Partition2(int a[],int left,int right){ int i = left,j; int pivot=a[right]; for(j=left;j