1
+ // Lab Program 1
2
+ // Quicksort (divide & conquer)
3
+ // Avg/Best Time Complexity: O(n*log(n))
4
+ // Worst Time Complexity: O(n^2)
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <time.h>
9
+
10
+ void swap (int * a , int * b )
11
+ {
12
+ int temp = * a ;
13
+ * a = * b ;
14
+ * b = temp ;
15
+ }
16
+
17
+ void display (int arr [], int n )
18
+ {
19
+ int i ;
20
+ for (i = 0 ; i < n ; i ++ )
21
+ printf ("%d\t" , arr [i ]);
22
+ }
23
+
24
+ int partition (int arr [], int low , int high )
25
+ {
26
+ int i = low - 1 , j = high , pivot = arr [low ];
27
+ while (i < j )
28
+ {
29
+ while (i < high && arr [i ] <= pivot )
30
+ i ++ ;
31
+ while (j > low && arr [j ] >= pivot )
32
+ j -- ;
33
+ if (i < j )
34
+ swap (& arr [i ], & arr [j ]);
35
+ }
36
+ swap (& arr [low ], & arr [j ]);
37
+ return j ;
38
+ }
39
+
40
+ void quicksort (int arr [], int low , int high )
41
+ {
42
+ if (low < high )
43
+ {
44
+ int pivotindex = partition (arr , low , high );
45
+ quicksort (arr , low , pivotindex - 1 );
46
+ quicksort (arr , pivotindex + 1 , high );
47
+ }
48
+ }
49
+
50
+ void main (){
51
+ int i , n , arr [500 ];
52
+ clock_t start = 0 , end = 0 ;
53
+
54
+ srand (time (NULL ));
55
+
56
+ printf ("enter no. of elements:\n" );
57
+ scanf ("%d" , & n );
58
+ for (i = 0 ; i < n ; i ++ )
59
+ arr [i ] = rand () % 500 + 1 ;
60
+
61
+ printf ("random generated array elements:\n" );
62
+ display (arr , n );
63
+
64
+ start = clock ();
65
+ quicksort (arr , 0 , n - 1 );
66
+ end = clock ();
67
+
68
+ printf ("\nthe sorted elements are:\n" );
69
+ display (arr , n );
70
+
71
+ printf ("\ntime taken : %f" ,(end - start )/(double )CLOCKS_PER_SEC );
72
+ }
0 commit comments