把待排序的紀錄按其關鍵碼值的大小逐個插入到乙個已經排好序的有序序列中,直到所有的紀錄插入完為止,得到乙個新的有序序列。
設無序陣列為a[0…n-1]。
具體做法:
將待插入記錄 a[i]的關鍵字從右向左依次與有序區中記錄 aj的關鍵字進行比較:
關鍵字比a[i]的關鍵字大的記錄均已後移,所以 j+1 的位置已經騰空,只要將 a[i] 直接插入此位置即可完成一趟直接插入排序。
例如待排序陣列a[0]=8,a[1]=5,a[2]=10,a[3]=12,a[4]=7,a[5]=6
第一趟:a[0]=8,有序,a[1…5]無序。
第二趟:temp=5,a[1]=5 < a[0]=8, 8往後移一位,a[1]=8,a[0]=5,a[0…1]有序,a[2…5]無序。
第三、四趟:a[2]=10 > a[1]=8,a[3]=12 > a[2]=10,有序無須移動,a[4…5]無序。
第五趟:temp=7,a[4]=7 < a[3]=12,12往後移一位,a[4]=12,依次類推…直到a[0]=5 < temp,即a[1]=7。
第六趟模擬第五趟,可以得到6插入位置為a[1]=6。排序完成。
直接插入排序演算法時間複雜度:o(n^2);空間複雜度:o(1)。直接插入排序是穩定的排序方法。
//直接插入排序
void insertsort(int *arr, int n)
arr[j + 1] = temp;
}}
用直接插入排序演算法對陣列arr[10] = ;從小大排序。@test
public
void
sort1() ;
for (int i = 1; i < arr.length; i++)
arr[j + 1] = temp;
}// 輸出陣列元素
for (integer it : arr)
}
輸出3 5 6 7 8 9 10 11 12 15
直接插入排序
直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...
直接插入排序
直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...
直接插入排序
源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...