1 #include<stdio.h>
2 #define N 10
3 void swap(int *p1, int *p2);
4 void BubbleSort(int *a);
5 void SelectSort(int a[]);
6 void QuickSort(int *a, int left, int right);
7 int main(){
8 int a[N] = {3,6,9,8,5,3,1,6,0,2};
9 int i;
10 //SelectSort(a);
11 QuickSort(a,0,sizeof(a)/sizeof(a[0])-1);
12 for(i=0; i<N; i++){
13 printf("%d ", a[i]);
14 }
15 return 0;
16 }
17
18 void swap(int *p1, int *p2){
19 int temp = *p1;
20 *p1 = *p2;
21 *p2 = temp;
22 }
23 void swap2(int a[], int i, int j)
24 {
25 int t = a[i];
26 a[i] = a[j];
27 a[j] = t;
28 }
29 void BubbleSort(int *a){
30
31 int i,j;
32 for(i=0; i<N-1; i++){ /* 注意 N-1 */
33 for(j=0; j<N-1-i; j++){
34 if(a[j]>a[j+1])
35 swap(&a[j],&a[j+1]);
36 }
37 }
38
39 }
40
41 void SelectSort(int a[]){
42 int i,j,min;
43
44 for(i=0; i<N-1; i++){ /*一个n-1,下面n*/
45 min = i;
46 for(j=i+1; j<N; j++){
47 if(a[j]<a[min])
48 min =j;
49 }
50 swap(&a[i],&a[min]);
51 }
52 }
53
54 void QuickSort(int *a, int left, int right){
55 int key = a[left];
56 int i = left;
57 int j = right;
58
59
60 if(left >= right)
61 return ;
62
63 while(i<j){
64 while(i<j && a[j]>=key){ /*a[j]>=key 如果只写> 会进入死循环*/
65 j--;
66 }
67 a[i] = a[j];
68 while(i<j && a[i]<=key){
69 i++;
70 }
71 a[j] = a[i];
72 }
73 a[i] = key;
74 QuickSort(a, left, i-1);
75 QuickSort(a, i+1, right);
76 }
77
78 /*
79 最差时间分析 平均时间复杂度 稳定度 空间复杂度
80 冒泡 O(n2) O(n2) 稳定 O(1)
81 选择 O(n2) O(n2) 稳定 O(1)
82 快速 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
83 */