快速排序
首先选定一个数为基准数,先对这个数进行归位。即从数列右边、左边分别开始(注意顺序,先右后左),从右向左寻找比基准数小的数,从左向右寻找比基准数大的数(且要保证右边的序数 j 大于左边的序数 i ),分别找到之后,对两数进行交换,如此循环,直到 i 等于 j。循环结束之后,将 i 位置的数与基准数进行交换。最后,运用递归,再对已经归位的基准数左右两边进行排序。具体同上。
例:对数列{6, 1, 2, 7, 9, 3, 4, 5, 10, 8}进行从小到大对排序。
#include <iostream>
using namespace std;
int a[100] {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
int main(void)
{
void func(int, int);
func(0, 9);
for(int i = 0; i < 10; i++) {
cout << a[i] << ' ';
}
return 0;
}
void func(int left, int right)
{
if(left > right)
return;
int i = left, j = right, temp = a[left], t;
while(i != j) {
while(j>i && a[j]>=temp)
j--;
while(i<j && a[i]<=temp)
i++;
if(i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
func(left, i-1);
func(i+1, right);
return;
}

浙公网安备 33010602011771号