这篇主要聚焦在排序算法,包括常见的选择排序,插入排序,冒泡排序,快速排序。会对这四种排序的时间复杂度和空间复杂度进行探究。
a.选择排序
1 int main(int argc,char **argv){
2 int a[12]={43,34,654,3,45,6,54,8,65,10,76,12};
3 int i,j,t,tmp;
4 for(i=0;i<12-1;i++){
5 t=i;
6 for(j=i;j<12;j++){
7 if (a[t]>a[j]) t=j;
8 }
9 if (t!=i){
10 tmp=a[i];
11 a[i]=a[t];
12 a[t]=tmp;
13 }
14 }
15 for(i=0;i<12;i++)printf("%d ",a[i]);
16 return 0;
17 }
b.插入排序
1 int main(int argc,char **argv){
2 int a[12]={43,34,654,3,45,6,54,8,65,10,76,12};
3 int i,j,t,tmp;
4 for(i=1;i<12;i++){
5 t=a[i];
6 j=i-1;
7 while(j>=0&&a[j]>t){
8 a[j+1]=a[j];
9 file:///E|/embed/Linux/book/c_note.txt[2015-05-30 23:43:42]j--;
10 }
11 a[j+1]=t;
12 }
13 }
14 for(i=0;i<12;i++)printf("%d ",a[i]);
15 return 0;
16 }
c.冒泡排序
1 int main(int argc,char **argv)
2 {
3 int a[12]={43,34,654,3,45,6,54,8,65,10,76,12};
4 int i,j,t;
5 for(i=1;i<12;i++)
6 {
7 for(j=0;j<12-i;j++)
8 {
9 if (a[j]>a[j+1])
10 {
11 t=a[j];
12 a[j]=a[j+1];
13 a[j+1]=t;
14 }
15 }
16 }
17 for(i=0;i<12;i++)printf("%d ",a[i]);
18 return 0;
19 }
d.快速排序
1 void qsort(int s[], int l, int r)
2 {
3 int i, j, x;
4 if (l < r)
5 {
6 i = l;
7 j = r;
8 x = s[i];
9 while (i < j)
10 {
11 while(i < j && s[j] > x) j--; /* 从右向左找第一个小于x的数 */
12 if(i < j) s[i++] = s[j];
13 while(i < j && s[i] < x) i++; /* 从左向右找第一个大于x的数 */
14 if(i < j) s[j--] = s[i];
15 }
16 s[i] = x;
17 qsort(s, l, i-1); /* 递归调用 */
18 qsort(s, i+1, r);
19 }
20 }