一、問題描述與分析
插入排序算法實現思想是將數據按照一定的順序一個一個的插入到有序的表中,最終得到的序列就是已經排序好的數據。
問題:
採用直接插入排序算法將無序表{3,1,7,6,4,8,2,5}進行升序排序
分析:
插入3,由於有序表中沒有任何記錄,所以3可以直接添加到有序表中;插入1,與3比較,1<3,所以1排在3之前;插入7,與3進行比較,3<7,所以7排在3之後;插入6,6<7,同時 6>3,所以插入到3和7中間,以此類推。
二、程序實現
#include <stdio.h>
//自定義的輸出函數
void print(int a[], int n ,int i){
printf("%d:",i);
for(int j=0; j<8; j++){//8個數進行排序,循環8次
printf("%d",a[j]);
}
printf("\n");
}
void InsertSort(int a[], int n)
{
for(int i= 1; i<n; i++){
if(a[i] < a[i-1]){//若第 i 個元素大於 i-1 元素則直接插入;反之,需要找到適當的插入位置後在插入。
int j= i-1;
int x = a[i];
while(j>-1 && x < a[j]){ //採用順序查找方式找到插入的位置,在查找的同時,將數組中的元素進行後移操作,給插入元素騰出空間
a[j+1] = a[j];
j--;
}
a[j+1] = x; //插入到正確位置
}
print(a,n,i);//打印每次排序後的結果
}
}
int main(){
int a[8] = {3,1,7,6,4,8,2,5};
InsertSort(a,8);
return 0;
}
- 三、實驗結果與分析
實驗結果:
分析:
該問題總的來說就是,若第 i 個元素大於 i-1 元素則直接插入;反之,需要找到適當的插入位置後在插入。本問題使用直接插入排序算法進行排序,就是在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然後將新記錄插入。