直接插入排序的思想:
#include
#include
using
namespace
std;
//直接插入排序 9,1,5,8,3,7,4,6,2
void insertsort(int *arr, int sz)
else
break;
}arr[++end] = key;
}}void printf(int arr, int sz)
}int main()
; int sz = sizeof(arr) / sizeof(arr[0]);
insertsort(arr, sz-1);
printf(arr, sz);
system("pause");
}
時間複雜度&&空間複雜度分析
【時間複雜度】
【空間複雜度】
由於儲存的是有限資料的個數,故時間複雜度為o(1)
【適用範圍】適合於少數數量的排序
希爾排序的思想:
希爾排序用**釋為:
希爾排序**如下:
#include
#include
using
namespace
std;
//希爾排序 9,1,5,8,3,7,4,6,2
void shellsort(int *arr, int sz)
else
break;
}arr[end + gap] = key;}}
}void printf(int arr, int sz)
}int main()
; int sz = sizeof(arr) / sizeof(arr[0]);
shellsort(arr, sz-1);
printf(arr, sz);
system("pause");
}
gap=gap/3+1確保了最後一次進行的是gap=1的直接插入排序;
且每一次迴圈進入gap的減小,都可以使得一次預排序的結果資料更加的接近有序;
while迴圈裡面的for迴圈,成功的一次過去將不同的分組中的資料在各自的分組中都進行一次直接插入排序;
希爾排序的時間複雜度&&空間複雜度
【時間複雜度】
希爾排序的時間複雜度為:o(n^(3/2))
由於記錄是跳躍式的移動,希爾排序並不是一種穩定的排序演算法
直接插入排序和希爾排序的對比
(1)當資料很多,且資料整體逆序時—-使用希爾排序
(2)當資料逆序,但資料不是很多時—-採用希爾排序和直接插入差不多
(3)當資料基本有序時,且數量不能太大(量級為千級)—–使用直接插入排序
直接插入排序和希爾排序
if defined insertsort h define insertsort h include define maxsize 100 typedef int keytype 關鍵字型別用來比較 typedef char infotype 其他型別的資訊 typedef structrecty...
直接插入排序和希爾排序
一 插入排序 在一組無序的陣列中,假設第乙個有序,每一次陣列中剩餘的元素與第乙個比較,然後逐個插入到乙個有序的序列中,直到這個陣列所有的數字有序為止 二 直接插入演算法 演算法思路 1 我們先假設第乙個有序的數字下標為end,2 下乙個要插入的數字 tmp 繼續構成有序就直接插入,此時end向後挪一...
直接插入排序和希爾排序
一 直接插入排序 插入排序 1.1 基本思想和原理 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,它有兩個作用 進入查詢 插入位置 迴圈之前,它儲存了r i ...