C 冒泡排序和選擇排序
阿新 • • 發佈:2017-08-19
true 不能 學習 print 出現 std src log stdio.h
冒泡排序
理論: 從第一個數開始,將相鄰的兩個數比較,第一個數和第二個數比較.....,要是是從小到大的排序,要是後面的數比前面的大則交換兩個的位置,這樣第一輪比較基數後最大的數就到了最後面,接著進行第二趟的比較,比較到前面N-1個數,原理也是前面的那樣,大的往後面不停的排,直到比較到前面只剩下一個數的時候,就完成了排序,這就是冒泡的原理:
下面用這個圖代表一下偽代碼,畫一下流程,說實話,在學校學習的時候,我連這個圖都不理解!
冒泡排序的代碼:
#include "stdio.h" #define N 10 int main(){ int a[N]; int i,j,t; printf("請輸入您要排序的%d 數字\n",N); /*輸入十個數*/ for(i=0;i<N;i++) scanf("%d",&a[i]); /*冒泡*/ for(j=0;j<N-1;j++){ for(i=0;i<N-j;i++){ if(a[i] > a[i+1]){ t = a[i]; a[i] = a[i+1]; a[i+1] = t; }}} printf("排序的結果是:"); for(i=0;i<N;i++){ printf("%d ",a[i]); } }
下面是寫的過程中出現的錯誤分析:
選擇排序
理論:這個選擇排序一起在上學的時候,感覺就是死腦子,就是有點轉不過來彎,就是不理解,說的感覺大學白上了,我故事是被大學白上了,被玩了四年出來發現自己啥都不懂,哈哈哈。。。可能是那時候笨吧,現在說說這個原理,選擇排序,就像是打擂臺一樣,我們先選第一個位置的數為基準位置,後面的一個一個挑戰,(比如我們從小到大排序),要是第二個數比第一個數小,則換擂主,第三個比第二個又小,再換,直到一輪比賽結束,找到最小的在前面,接著我們開始第二輪,第二輪以第二個數為基準。後面的一次比較。。直到最後一個數,這樣就整個排序過程出來了,無聊在畫個圖:
下面是基本的代碼部分:
#include "stdio.h" #define N 10 int main( ){ int i,j,t,k; int a[N]; printf("請輸入你要排序的%d個整數",N); for(i=0;i<N;i++) scanf("%d",&a[i]); /*註意這裏不能寫成N 不然下面的 j 會越界*/ for(i=0;i<N-1;i++){ k=i; for(j=i+1;j<N;j++){ if(a[k]>a[j]) k=j; } if(k!=i){ t= a[i]; a[i] = a[k]; a[k] = t; } } printf("最終排序的結果是:"); for(i=0;i<N;i++) printf("%d ",a[i]); }
上面就OK,這裏沒有什麽錯,最後看一下結果:
C 冒泡排序和選擇排序