排序:正序冒泡,交错冒泡,插入排序,选择排序,快速排序

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 #include<string.h>
  5 const int N=10;                            //修改随机数据量
  6 bool onOroff=1;                            //数组打印开关:1要打印,0不打印
  7 void bubble_sort(int a[],int n)
  8 {
  9     for(int i=0 ; i<N ; ++i)
 10     {
 11         for(int j=0 ; j<N-1 ; ++j)
 12             if(a[j]>a[j+1])
 13             {
 14                 int tmp=a[j+1];
 15                 a[j+1]=a[j];
 16                 a[j]=tmp;
 17             }
 18     }
 19 }
 20 
 21 void bubble_sort2(int a[],int n)
 22 {
 23     int i=0,j=n-1;
 24     while(i<j)
 25     {
 26         for(int k=i ; k<=j-1 ; ++k)
 27             if(a[k]>a[k+1])
 28             {
 29                 int tmp=a[k+1];
 30                 a[k+1]=a[k];
 31                 a[k]=tmp;
 32             }
 33         --j;
 34         if(i>=j)
 35             break;
 36         for(int k=j ; k>=i ; --k)
 37             if(a[k]<a[k-1])
 38             {
 39                 int tmp=a[k-1];
 40                 a[k-1]=a[k];
 41                 a[k]=tmp;
 42             }
 43         ++i;
 44     }
 45 }
 46 
 47 void insert_sort(int a[],int n)
 48 {
 49     int i=1,j=0,now=0,tmp=0;
 50     for(i=1 ; i<N ; ++i)
 51     {
 52         now=a[i];
 53         for(j=i-1 ; j>=0 ; --j)
 54         {
 55             if(a[j]>now)
 56                 a[j+1]=a[j];
 57             else
 58                 break;
 59         }
 60         a[j+1]=now;
 61     }
 62 }
 63 
 64 void select_sort(int a[],int n)
 65 {
 66     int MIN,MINi,tmp;
 67     for(int i=0 ; i<N ; ++i)
 68     {
 69         MIN=0x3fffffff;
 70         for(int j=i ; j<N ; ++j)
 71             if(a[j]<MIN)
 72             {
 73                 MINi=j;
 74                 MIN=a[j];
 75             }
 76         tmp=a[i];
 77         a[i]=a[MINi];
 78         a[MINi]=tmp;
 79     }
 80 }
 81 
 82 int part_qsort(int a[], int n ,int l,int r)
 83 {
 84     int mid=0,tmpmid=a[l];
 85     while(l<r)
 86     {
 87         while(l<r && a[r]>=tmpmid)
 88             --r;
 89         if(l<r)
 90         {
 91             a[l]=a[r];
 92             ++l;
 93         }
 94         else
 95             break;
 96         while(l<r && a[l]<=tmpmid)
 97             ++l;
 98         if(l<r)
 99         {
100             a[r]=a[l];
101             --r;
102         }
103         else
104             break;
105     }
106     a[l]=tmpmid;
107     return l;
108 }
109 
110 void myquick_sort(int a[],int n,int l,int r)
111 {
112     int position;
113     if(l<r)
114     {
115         position=part_qsort(a,n,l,r);
116         myquick_sort(a,n,l,position-1);
117         myquick_sort(a,n,position+1,r);
118     }
119 }
120 
121 void P(int a[],int n)
122 {
123     if(1==onOroff)
124     {
125         for(int i=0 ; i<N ; ++i)
126             printf("%d ",a[i]);
127         printf("
");
128     }
129 }
130 
131 int main(int argc,char* argv[])
132 {
133     //排序
134     clock_t bg,end;
135     srand(time(NULL));
136     int arr3[N];
137     for(int i=0 ; i<N ; ++i)
138         arr3[i]=rand()%100;
139     printf("随机数据量:%d
原始数组:",N);
140     P(arr3,N);
141     printf("
");
142     //正序冒泡
143     int arr_bubble[N];
144     memcpy(arr_bubble,arr3,sizeof(arr3));
145     bg=clock();
146     bubble_sort(arr_bubble,N);
147     end=clock();
148     printf("正序冒泡:");
149     P(arr_bubble,N);
150     printf("耗时:%5.15f秒

",(double)(end-bg)/CLOCKS_PER_SEC);
151     //交错冒泡
152     memcpy(arr_bubble,arr3,sizeof(arr3));
153     bg=clock();
154     bubble_sort2(arr_bubble,N);
155     end=clock();
156     printf("交错冒泡:");
157     P(arr_bubble,N);
158     printf("耗时:%5.15f秒

",(double)(end-bg)/CLOCKS_PER_SEC);
159     //插入排序
160     memcpy(arr_bubble,arr3,sizeof(arr3));
161     bg=clock();
162     insert_sort(arr_bubble,N);
163     end=clock();
164     printf("插入排序:");
165     P(arr_bubble,N);
166     printf("耗时:%5.15f秒

",(double)(end-bg)/CLOCKS_PER_SEC);
167     //选择排序
168     memcpy(arr_bubble,arr3,sizeof(arr3));
169     bg=clock();
170     insert_sort(arr_bubble,N);
171     end=clock();
172     printf("选择排序:");
173     P(arr_bubble,N);
174     printf("耗时:%5.15f秒

",(double)(end-bg)/CLOCKS_PER_SEC);
175     //快速排序
176     memcpy(arr_bubble,arr3,sizeof(arr3));
177     bg=clock();
178     myquick_sort(arr_bubble,N,0,N-1);
179     end=clock();
180     printf("快速排序:");
181     P(arr_bubble,N);
182     printf("耗时:%5.15f秒

",(double)(end-bg)/CLOCKS_PER_SEC);
183 
184     system("pause");
185     return 0;
186 }

 

原文地址:https://www.cnblogs.com/Evence/p/4469140.html