快速排序算法

来源:互联网 发布:数据库设计实例 编辑:程序博客网 时间:2024/06/10 00:44
#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;} 
原创粉丝点击