// quick_sort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define data_num 20
void quick_sort(unsigned int *data, int p, int r);
int partition(unsigned int *data, int p, int r);
int _tmain(int argc, _TCHAR* argv[])
{
int i, j, k;
unsigned int data_array[data_num];
srand(83301546);
for (i = 0; i < data_num; i++)
{
data_array[i] = rand();
printf("%d ", data_array[i]);
}
printf("\n\n");
quick_sort(data_array, 0, data_num - 1);
for (i = 0; i < data_num; i++)
{
printf("%d ", data_array[i]);
}
printf("\n\n");
while (1);
return 0;
}
void quick_sort(unsigned int *data, int p, int r)
{
int q = 0;
if (p < r)
{
q = partition(data, p, r);
quick_sort(data, p, q-1);
quick_sort(data, q+1, r);
}
}
//总是把比哨兵小的放左边,不断递归,分治
int partition(unsigned int *data, int p, int r)
{
int i, j;
unsigned int x, temp;
x = data[r];
i = p - 1;
for (j = p; j <= (r - 1);j++)
{
if (data[j] < x)
{
i = i + 1;
temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
temp = data[r];
data[r] = data[i+1];
data[i+1] = temp;
return (i + 1);
}