-
Notifications
You must be signed in to change notification settings - Fork 0
/
quicksort.c
52 lines (39 loc) · 1.01 KB
/
quicksort.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#define N 7
void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);
int main(void){
int i;
int a[N] = { 12, 3, 6, 18, 7, 15, 10 };
printf("The array: ");
for(i = 0; i < N; i++)
printf("%3d ", a[i]);
quicksort(a, 0, N-1);
printf("In sorted order: ");
for (i= 0; i < N; i++)
printf("%3d ", a[i]);
printf("\n");
return 0;
}
void quicksort(int a[], int low, int high){
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle-1);
quicksort(a, middle+1, high);
}
int split(int a[], int low, int high){
int part_element = a[low];
for(;;) {
while (low < high && part_element <= a[high])
high--;
if (low >= high) break;
a[low++] = a[high];
while (low < high && a[low] <= part_element)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}