您的位置:首页 > 其它

快速排序算法

2017-11-01 14:59 204 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 算法