Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6429 | siemargl | 1 | #include |
2 | |||
3 | int array[16]; |
||
4 | |||
5 | //Swap integer values by array indexes |
||
6 | void swap(int a, int b) |
||
7 | { |
||
8 | int tmp = array[a]; |
||
9 | array[a] = array[b]; |
||
10 | array[b] = tmp; |
||
11 | } |
||
12 | |||
13 | //Partition the array into two halves and return the |
||
14 | //index about which the array is partitioned |
||
15 | int partition(int left, int right) |
||
16 | { |
||
17 | int pivotIndex = left; |
||
18 | int pivotValue = array[pivotIndex]; |
||
19 | int index = left; |
||
20 | int i; |
||
21 | |||
22 | swap(pivotIndex, right); |
||
23 | for(i = left; i < right; i++) |
||
24 | { |
||
25 | if(array[i] < pivotValue) |
||
26 | { |
||
27 | swap(i, index); |
||
28 | index += 1; |
||
29 | } |
||
30 | } |
||
31 | swap(right, index); |
||
32 | |||
33 | return index; |
||
34 | } |
||
35 | |||
36 | //Quicksort the array |
||
37 | void quicksort(int left, int right) |
||
38 | { |
||
39 | if(left >= right) |
||
40 | return; |
||
41 | |||
42 | int index = partition(left, right); |
||
43 | quicksort(left, index - 1); |
||
44 | quicksort(index + 1, right); |
||
45 | } |
||
46 | |||
47 | int main() |
||
48 | { |
||
49 | int i; |
||
50 | |||
51 | array[0] = 62; |
||
52 | array[1] = 83; |
||
53 | array[2] = 4; |
||
54 | array[3] = 89; |
||
55 | array[4] = 36; |
||
56 | array[5] = 21; |
||
57 | array[6] = 74; |
||
58 | array[7] = 37; |
||
59 | array[8] = 65; |
||
60 | array[9] = 33; |
||
61 | array[10] = 96; |
||
62 | array[11] = 38; |
||
63 | array[12] = 53; |
||
64 | array[13] = 16; |
||
65 | array[14] = 74; |
||
66 | array[15] = 55; |
||
67 | |||
68 | for (i = 0; i < 16; i++) |
||
69 | printf("%d ", array[i]); |
||
70 | |||
71 | printf("\n"); |
||
72 | |||
73 | quicksort(0, 15); |
||
74 | |||
75 | for (i = 0; i < 16; i++) |
||
76 | printf("%d ", array[i]); |
||
77 | |||
78 | printf("\n"); |
||
79 | |||
80 | return 0; |
||
81 | } |
||
82 | |||
83 | /* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/>>>> |