C语言面试题(三)

  这篇主要聚焦在排序算法,包括常见的选择排序,插入排序,冒泡排序,快速排序。会对这四种排序的时间复杂度和空间复杂度进行探究。

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 }
wsksec@gmail.com Pressing on Toward the Goal
原文地址:https://www.cnblogs.com/shuk-notes/p/4694920.html