这种排序算法 实际上也要依靠冒泡的手段。
大致思路是这样子的, 比如有个序列, 1,4,7,-33,24,9,10,22,43,0.
这里有10个数, 首先 我们随便拿一个数出来,假设拿第一个出来, 然后从后面把 凡事比1小的 全部 给我推到左边,把比1大的 给我放右边 ,这个时候 整个序列就变成了 -33,0, 1 ,4, 7, 24, 9, 10,22,43. 变成这个样子了,然后对1左边的序列 做刚才那个过程,右边的同样做这个过程, 也就是两边挪动的过程, 如此递归 ,终将成为有序也。
这个过程应该很容易理解。
下面给出实际的例子,下面是演示代码, 一般给出的代码 在VC下面可以直接编译 运行。
#include <iostream>
using namespace std;
int partion(int * p, int start, int end)
{
int x = p[end];
int mid = start;
for (int j = start; j < end; j++)
{
if (p[j] < x)
{
std::swap(p[mid], p[j]);
mid ++;
}
}
swap(p[mid], p[end]);
return mid;
}
void quik_sort(int *p, int start, int end)
{
if (start < end)
{
int pos = partion(p, start, end);
quik_sort(p, start, pos -1);
quik_sort(p, pos + 1, end);
}
}
int main(int argc, char* argv[])
{
int array[]={0,-2,11,-4,13,-5,14,-43};
quik_sort(array,0,7);
for(int i = 0 ; i <= 7 ; i++)
std::cout<<array[i]<<" ";
system("pause");
return 0;
}