-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquicksort.c
46 lines (42 loc) · 921 Bytes
/
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int * n1 , int * n2 ){
int temp = *n1 ;
*n1 = *n2 ;
*n2 = temp ;
}
int partition(int * arr,int start,int end ){
int pindex = start ;
int pivot = arr[end] ;
for(int i= start ;i<end; i++){
if(arr[i]<=pivot ){
swap((arr+i),(arr+pindex)) ;
pindex++ ;
}
}
swap(arr+pindex,arr+end) ;
return pindex ;
}
int randpart(int *arr,int start,int end){
srand(time(NULL));
int pindex =start+rand()%(end-start);
swap(arr+end,arr+pindex);
return partition(arr,start,end);
}
void quicksort(int * arr,int start ,int end ){
if(start <end){
int pindex =randpart(arr,start,end) ;
quicksort(arr,start,pindex-1 ) ;
quicksort(arr,pindex+1,end);
}
}
int main()
{
int arr[10] = {9,3,1,0,2,4,5,6,7,8};
quicksort(arr,0,10) ;
for(int i = 0 ; i <10 ;i ++){
printf("%d ",arr[i]) ;
}
return 0;
}