View on GitHub

Yoy-wiw

A website on lisp.

Download this project as a .zip file Download this project as a tar.gz file

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