八大排序——直接插入排序

直接插入排序(Straight Insertion Sort)的基本操作是將一個元素插入到序列已經有序的那一部分中去,從而使序列中有序的部分逐漸擴大,直到整個序列有序。博主認爲直接插入排序過程比較容易理解,所以不作過多贅述,直接上代碼

#include<stdio.h>

void main()
{
    int a[6]={5,6,8,4,6,9};
    int length=sizeof(a)/sizeof(int);
    int temp;
    int i,j;
    for(i=1;i<length;i++){
        if(a[i]<a[i-1]){
            temp=a[i];
            for(j=i-1;j>=0&&a[j]>temp;j--){
                a[j+1]=a[j];            
            }
            a[j+1]=temp;
        }
    }
    for(i=0;i<length;i++){
        printf("%d\t",a[i]);
    }
    printf("\n");
}

直接插入排序的整個過程是一個for循環嵌套了一個if條件判斷語句,if語句中又嵌套着一個for循環。外層for循環的每一步都是直接進行if條件判斷,比較a[i]和a[i-1],若不符合條件則說明有序,for循環直接跳入下一層,若符合則說明無序,進入if語句,將較小的一個元素賦給”哨兵“temp,緊接着進入代碼12到14行的for循環,這個循環是將”合適位置“與a[i]之間的所有元素統一向後移動一位,直到找到”合適位置“也就是說for循環不滿足循環條件的時候,將temp的值放入到“合適位置”,”哨兵“temp的作用就是保存待插入元素,以免移動造成其數據丟失
注:直接插入排序算法的時間複雜度爲O(n^2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章