純手擼——直接插入排序
阿新 • • 發佈:2020-08-06
資料結構複習的最後一章節,給自己個小目標一禮拜內完純手擼完考綱必考排序的程式碼,保持獨立思考。
首先是直接插入排序,順一遍步驟:
- 假設給定陣列(整型)第一個元素有序
- 從第二個元素開始,與自己左邊的第一個元素比較,如果比自己小,則不動;如果比自己大,就與自己左邊的第二個元素比較;直到遇到不比自己大的元素,在其右邊插入
- 選取後面的元素,依次重複第二步
#include<stdio.h> //後面為了測試寫的輸出,輸出每一次排序後的資訊。這是後面補上的,方便觀察,必須放在InsertSort方法前 void print(int a[], int n ,int i){ printf("%d:",i); for(int j=0; j<8; j++){ //這裡可自行修改 printf("%d",a[j]); } printf("\n"); } //直接插入排序 void InsertSort(int a[],int n){ //a為要排序的陣列,n為元素總個數 (即長度) for(int i=1;i<n;i++){ //預設第一個元素有序,故i從地址下標1處開始迴圈 if(a[i]<a[i-1]){ //第i個元素大於i-1元素,不動;反之,要找適當位置插入 int j=i-1; //j指向i的左邊第一個元素 int tmp=a[i]; //臨時儲存待插入元素 while(j>-1&&tmp<a[j]){ //找要插入的位置 a[j+1]=a[j]; //陣列元素後移一個位置,這是為了給待插入元素騰出位置 j--; } a[j+1]=tmp; //插入正確的位置,即最後比較不比自己大的元素的右邊 } print(a,n,i);//列印每次排序後的結果 } } //測試 int main(){ int a[8]={3,1,7,5,2,4,9,6}; //預計 1 2 3 4 5 6 7 8 9 InsertSort(a,8); }