#關於選擇排序與氣泡排序演算法詳解
阿新 • • 發佈:2018-12-22
關於選擇排序與氣泡排序演算法詳解
本篇主要應C語言初學者對氣泡排序和選擇排序的一個初步介紹和認知
首先我們來認識下選擇排序
那什麼是選擇排序呢?選擇排序就是指在一推數組裡每一次從待排序的資料元素中選出最小(或最大)的一個元素,放在陣列最末的位置(最前面的位置也可以)。以此迴圈下去,直到全部資料排完。
那我們先來看一下程式碼
*此處的n為長度,自己掌控
#include <stdio.h> int main() { int i,j,t,a[11]; //定義變數及陣列為基本整型 printf("請輸入n個數:\n"); for(i=1;i<n;i++) {scanf("%d",&a[i]); //從鍵盤中輸入要排序的n個數字 printf("%3d",a[i]); //先輸出排序前的陣列順序 } for(i=1;i<=n-1;i++) for (j=i+1;j<=n;j++) if(a[i]>a[j]) //通過i和j的比較大小,如果前大,則交換位置 { t=a[i]; //常用的交換三連 a[i]=a[j]; a[j]=t; } for(i=1;i<=n;i++) // 通過迴圈輸出排序後的陣列 printf("%3d", a[i]); printf("\n"); return 0; }
這就是選擇排序的程式碼了,具體原理作者如下解釋
第一次交換
第二次交換在第一次交換的基礎上進行
第三次交換
經過六輪查詢後 最大數一直往後靠 結果為:
以上就是選擇排序的基本過程了,當然,你也可以比較最小的放在第一位,以此類推,反覆練習即可熟練
接下來認識下氣泡排序
所謂的氣泡排序也叫升序排序法,但是相比起二分查詢只能應用於有序數列。
相鄰的兩兩個數比較 ,若前者大後者小,則交換。
下面看一下程式碼
*n為長度自己定義即可
``
#include <stdio.h> int main() { int i,j,t,a[n]; printf("請輸入n個數:\n"); for(i=1;i<n;i++) scanf("%d",&a[i]); //從鍵盤中輸入n個數 for(i=1;i<n-1;i++) //變數i代表比較的趟數 for(j=1;j<n-i;j++) //變最j代表每趟兩兩比較的次數 if(a[j]>a[j+1]) { t=a[j]; //產利用中間變童實現兩值互換 a[j]=a[j+1]; a[j+1]=t; } printf("排序後的順序是:\n"); for(i=1;i<=n;i++) printf("% d",a[i]); //將氣泡排序後的順序輸出 return 0; }
*當然大家可以試一下在函式裡寫這些排序
下期更新二分查詢和插入排序