#include <stdio.h>
int partition(int a[], int beg, int end)
{
int pos;
int v = a[beg];
int i = beg, j = end;
while(i < j)
{
sleep(2);
while(a[j] > v)
j--;
if(i < j)
{
a[i] = a[j];
i++;
}
while(a[i] < v)
i++;
if(i < j)
{
a[j] = a[i];
j--;
}
}
printf("v = %d, i=%d\n", v, i);
if(i > end)
pos = end;
else
pos = i;
a[pos] = v;
return pos;
}
void quick_sort(int a[], int beg, int end)
{
if(beg >= end)
return;
printf("begin:\n");
int pos = partition(a, beg, end);
int i = 0;
for(i = beg; i <= end; i++)
printf("a[%d] is %d\t", i, a[i]);
quick_sort(a, beg, pos-1);
quick_sort(a, pos+1, end);
printf("in q_s!\n");
}
int main()
{
int a[8]={3,2,6,4,8,1,7,5};
//int a[4] = {8,6,7,5};
quick_sort(a,0,7);
int i = 0;
for(i = 0; i < 8; i++)
printf("a[%d] is %d\t", i, a[i]);
}
快速排序的原理:采用分治的思想。采用两端同时向中间靠拢的方式实现快排。
注意观察v值,它表示了每一次partition得到的值,它相当于一个根节点,而最后的结果相当于对新生成的树的中序遍历
3
1 4
2 8
5
6
7