Quicksort 快速排序
在《算法导论》中看到快速排序的方法,练习一下。
24 Oct 2013
1 #include <stdio.h>
2 #include <time.h>
3 #include <stdlib.h>
4
5 static int quicksort(int *a, int s, int e);
6 static void printarray(int *a, unsigned int size);
7
8 int main(int argc, char ** argv)
9 {
10 int *A = NULL;
11 int size = 10;
12 int i = 0;
13
14 srand(time(NULL));
15 if(argc > 1){
16 size = atoi(argv[1]);
17 }
18 if(size <= 0 || size > 10000){
19 printf ("usage: %s size <RET> size<=10000\n", argv[0]);
20 return 1;
21 }
22 A = (int *)malloc(size);
23 if(A == NULL){
24 printf("malloc failed!\n");
25 return 1;
26 }
27 for(i=0; i<size; ++i){
28 A[i] = rand()%(size*100);
29 }
30 printarray(A, size);
31 quicksort(A, 0, size);
32 printarray(A, size);
33 free(A);
34 return 0;
35 }
36 static void printarray(int *a, unsigned int size)
37 {
38 int i;
39 for(i=0; i<size; ++i){
40 printf("%d ", a[i]);
41 }
42 printf("\n");
43 }
44 static void exchange(int *a, int i, int j)
45 {
46 int t;
47 t = a[i];
48 a[i] = a[j];
49 a[j] = t;
50 }
51 static int quicksort(int *a, int s, int e)
52 {
53 int x, i, j;
54 if(e-s < 2){
55 return 0;
56 }
57 x = a[e-1];
58 i = s-1;
59 for(j=s; j<e-1; ++j){
60 if(a[j] < x){
61 exchange(a, ++i, j);
62 }
63 }
64 exchange(a, ++i, e-1);
65 quicksort(a, s, i);
66 quicksort(a, i+1, e);
67 return 0;
68 }
编译and运行
1 [weida@linklook local-projects]$ gcc -Wall -g -o quicksort quicksort.c
2 [weida@linklook local-projects]$ ./quicksort 20
3