排序演算法二:快速排序
阿新 • • 發佈:2018-12-11
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define LEN 50 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int partition(int num[], int l, int r) { int i = l-1, j = r, v = num[r]; for (; ;) { while (num[++i] < v); while (num[--j] > v) if(j == l) break; if (i < j) swap(&num[i], &num[j]); else break; } swap(&num[i], &num[r]); return i; } void quick_sort(int num[], int l, int r) { int i; if (l >= r) return; i = partition(num, l, r); quick_sort(num, l, i-1); quick_sort(num, i+1, r); } void show(int num[], int len) { int i; for (i = 0; i < len; i++) printf("%3d", num[i]); printf("\n"); } void init(int num[], int len) { int i; srand(time(NULL)); for (i = 0; i < len; i++) num[i] = rand() % 100; } int main(int argc, char *argv[]) { int i, num[LEN]; init(num, LEN); show(num, LEN); quick_sort(num, 0, LEN-1); show(num, LEN); return 0; }