交换排序交换排序分为快速排序和冒泡排序,就是根据序列中两个值的比较结果来对换这两个数在序列中的位置,特点就是较大值向尾部移动,较小值向前部移动。
快速排序基本思路为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值。然后采用分治的思想,把一个问题变成两个同样小问题(用递归去解决)。
//进行找基准值,代码如下面的框栏所示。
//进行递归操作
void _QuickSort(int array[], int left, int right)
{
//分出来的小区间里面有一个值或没有值说明区间内没有数了,递归也就结束了
if (left >= right){
return;
}
//定义一个基准值
int div = Parition(array, left, right);
//进行递归去排序
_QuickSort(array, left, div - 1);
_QuickSort(array, div + 1, right);
}
void QuickSort(int array[], int size)
{
_QuickSort(array, 0, size - 1);
}
找基准值法1:hoare版本:基本思路:先将右边的值作为基准值,用两个指针,第一个开始指向头,第二个指向尾,第一个往右走,第二个往左边走,当第一个遇见比基准值大的停下来,第二个遇见比基准值小的停下来,然后交换两个数。直到两个指针同时指向同一个数,则将其与基准值交换,然后返回这两个指针其中