快速排序(quick sort)

来源:互联网 发布:hash算法有哪些 编辑:程序博客网 时间:2024/05/22 01:54

http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F


#include <stdio.h>#include <stdlib.h>/* 数据交换 */void swap(int *a, int *b){    int tmp;    tmp = *a; *a = *b; *b = tmp;} void quick_sort(int a[], int left, int right){    int i = left + 1, j = right;    int  key = a[left];     if (left >= right) return;     /* 从i++和j--两个方向搜索不满足条件的值并交换  *     * 条件为:i++方向小于key,j--方向大于key      */    while (1) {       while (a[j] > key) j--;       while (a[i] < key&&i<j) i++;       if(i >= j) break;       swap(&a[i],&a[j]);       if(a[i]==key)j--;       else  i++;    }     /* 关键数据放到‘中间’ */    swap(&a[left],&a[j]);     if(left  < i - 1)   quick_sort(a, left, i - 1);    if(j + 1 < right)  quick_sort(a, j + 1 , right);}void main() {    int i;    int num_array[20];    srand(0);    printf("\r\n init: ");    for(i = 0; i < 20; i++) {        num_array[i] = rand()%1000;        printf("%d ", num_array[i]);    }    quick_sort(num_array, 0, 19);    printf("\r\n quick sort: ");    for(i = 0; i < 20; i++) {        printf("%d ", num_array[i]);    }}


C89标准在stdlib.h中定义了抽象数据类型的快速排序函数 qsort://尽量用这个接口。

#include <stdio.h>#include <stdlib.h>static int cmp(const void *a, const void *b){    return *(int *)a - *(int *)b;}void main() {    int i;    int num_array[20];    srand(0);    printf("\r\n init: ");    for(i = 0; i < 20; i++) {        num_array[i] = rand()%1000;        printf("%d ", num_array[i]);    }    qsort(num_array, 20, sizeof(int), cmp);    printf("\r\n quick sort: ");    for(i = 0; i < 20; i++) {        printf("%d ", num_array[i]);    }}