#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int array[], int start, int end)
{
int index;
int flag;
int x = array[end];
flag = start - 1;
for(index = start; index < end; index++) {
if (array[index] < x) {
flag++;
if (flag != index) {
swap(&array[flag], &array[index]);
}
}
}
flag++;
swap(&array[flag], &array[end]);
return flag;
}
int partition1(int array[], int begin, int end)
{
int i;
int j;
int p;
p = array[begin];
i = begin + 1;
j = end;
while (i < j) {
while ((i < j) && (array[j] > p))
j--;
while ((i < j) && (array[i] < p))
i++;
if (i < j)
swap(&array[i], &array[j]);
}
if (array[i] < p)
swap(&array[begin], &array[i]);
return i;
}
void quick_sort(int array[], int start, int end)
{
int index;
if (start >= end)
return;
index = partition1(array, start, end);
quick_sort(array, start, index-1);
quick_sort(array, index+1, end);
}
int main(int argc, char *argv[])
{
int i;
int a[] = {100, 45, 3, 5,78,23,9,2,0,57};
int len;
len = sizeof(a)/sizeof(a[0]);
quick_sort(a, 0, len - 1);
for (i = 0; i < len; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
快速排序算法
最新推荐文章于 2024-07-18 22:30:07 发布