1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void quickSort(int a[],int left,int right)
5 {
6 if(a==NULL||left>=right)
7 return;
8
9 ////////////////////////////////////
10 int m=(left+right)/2;
11 int t;
12 t=a[m];
13 a[m]=a[right];
14 a[right]=a[m];
15 ///////////////////////////////////////
16 int i=left,j=right-1,pivot=a[right],tmp;
17
18 while(i<=j)
19 {
20 while(a[i]<pivot) i++;
21 while(a[j]>pivot) j--;
22 if(i<=j) // <=
23 {
24 tmp=a[i];
25 a[i]=a[j];
26 a[j]=tmp;
27 i++;
28 j--;
29 }
30 }
31 tmp=a[right];
32 a[right]=a[i];
33 a[i]=tmp;
34
35 quickSort(a,left,i-1);
36 quickSort(a,i+1,right);
37 }
38
39
40 void insertSort(int a[],int n)
41 {
42 int i,j,minIndex,tmp;
43 for(i=0; i<n-1; ++i)
44 {
45 minIndex=i;
46 for(j=i+1; j<n; ++j)
47 {
48 if(a[minIndex]>a[j])
49 {
50 minIndex=j;
51 }
52 }
53 tmp=a[i];
54 a[i]=a[minIndex];
55 a[minIndex]=tmp;
56 }
57 }
58
59 void shellSort(int a[],int n)
60 {
61 int k,i,j,tmp;//k是增量(我经常说成是步长)
62 for(k=n/2; k>=1; k/=2)
63 {
64 for(i=k; i<n; ++i)
65 {
66 tmp=a[i];
67 for(j=i-k; j>=0&&a[j]>tmp; j-=k)
68 {
69 a[j+k]=a[j];
70 }
71 a[j+k]=tmp;
72 }
73 }
74 }
75
76 void bubbleSort(int a[],int n)
77 {
78 //bool flag=false; //我去,原来C语言里竟然没有bool类型,C++中有
79 int flag;
80 int i,j,tmp;
81 for(i=0; i<n-1; ++i)
82 {
83 //flag=false;
84 flag=0;
85 for(j=n-1; j>i; --j)
86 {
87 if(a[j]<a[j-1])
88 {
89 tmp=a[j];
90 a[j]=a[j-1];
91 a[j-1]=tmp;
92 //flag=true;
93 flag=1;
94 }
95 }
96 if(!flag) //本趟没有发生交换,则说明已经有序了
97 return;
98 }
99 }
100
101 //桶排序
102 void bucketSort(int a[],int n)
103 {
104 int b[11]= {0}; //初始化,假设数据范围是1-10
105 int i,j=0,value;
106 for(i=0; i<n; ++i)
107 {
108 value=a[i];
109 b[value]++;
110 }
111 for(i=0; i<11; ++i)
112 {
113 while(b[i]!=0)
114 {
115 a[j]=i;
116 j++;
117 b[i]--;
118 }
119 }
120 }
121
122 /*void swap(int *a,int *b){
123 int t;
124 t=*a;
125 *a=*b;
126 *b=t;
127 }*/
128
129 //归并排序
130 void mSort(int a[],int tmp[],int left,int right)
131 {
132 if(left<right)
133 {
134 int mid=(left+right)/2;
135 mSort(a,tmp,left,mid);
136 mSort(a,tmp,mid+1,right);
137 merge(a,tmp,left,mid+1,right);
138 }
139 }
140 void merge(int a[],int tmp[],int lstart,int rstart,int end)
141 {
142 int i,j,k;
143 i=lstart;
144 j=rstart;
145 k=lstart;
146 while(i<=rstart-1&&j<=end)
147 {
148 if(a[i]<a[j])
149 {
150 tmp[k++]=a[i++];
151 }
152 else
153 {
154 tmp[k++]=a[j++];
155 }
156 }
157 while(i<=rstart-1)
158 {
159 tmp[k++]=a[i++];
160 }
161 while(j<=end)
162 {
163 tmp[k++]=a[j++];
164 }
165
166 //把数据从临时数组中拷贝到原始数组中
167 for(i=lstart; i<=end; ++i)
168 {
169 a[i]=tmp[i];
170 }
171 }
172 void mergeSort(int a[],int n)
173 {
174 int *tmp;
175 tmp=malloc(n*sizeof(int));
176 if(tmp!=NULL)
177 {
178 mSort(a,tmp,0,n-1);
179 free(tmp);
180 }
181 }
182
183
184 int main()
185 {
186 int a[]= {6,2,7,1,1,1,5};
187 int i,n=sizeof(a)/sizeof(int);
188 //quickSort(a,0,n-1);
189 //insertSort(a,n);
190 //bubbleSort(a,n);
191 //bucketSort(a,n);
192 mergeSort(a,n);
193 for(i=0; i<n; i++)
194 {
195 printf("%d ",a[i]);
196 }
197
198 /*int b[]={0,1};
199 swap(&b[0],&b[1]);
200 printf("
%d%d",b[0],b[1]);*/
201 return 0;
202 }