交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列前端移动。
1.快速排序
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据要比另外一部分的所有数据都要小,然后再按照该方法对两部分的数据序列分别再进行快排。所以整个排序过程可以递归进行,以此达到整个数据均变为有序序列。
基本步骤:
- 将最左侧的元素作为‘枢轴’放入“哨所”。
- 设置low和high分别指向数组两端。
- high向左移动,一旦遇到比哨所元素小的元素就将其移入左边的low位置。
- low向右移动,一旦遇到比哨所元素大的元素就将其移入右边的high位置。
- high、low左右交替移向中间,直至high=low停止。此时枢轴左侧元素均小于其枢轴值,右侧元素均大于其枢轴值。
- 将枢轴记录填入重叠位置即完成一次划分。
- 递归实现左右两侧部分。
代码实现:
int Part(int list[], int low, int high){
list[0] = list[low];
while(low < high){
while(high>low && list[high] >= list[0])
high--;
list[low]=list[high];
while(low<high && list[low] <= list[0])
low++;
list[high]=list[low];
}
list[low] = list[0];
re