快速排序算法
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; }