直接插入排序的過程是:
1.將整個待排序的記錄序列劃分成有序區和無序區,初始時有序區為待排序記錄序列中的第乙個記錄,無序區包括所有剩餘待排序的記錄;
2.將無序區的第乙個記錄插入到有序區的合適位置中,從而使無序區減少乙個記錄,有序區增加乙個記錄;
3.重複執行第二步,直到無序區中沒有記錄為止。
第一步的解決:
將第乙個記錄看成是初始有序區,然後從第二個記錄起依次插入到這個有序區中,直到將第len個記錄插入完畢,演算法描述為:
for(i=1;i
一般情況下,在i-1個記錄的有序區array[0]~array[i-1]中插入乙個記錄array[i]時,首先要查詢array[i]的正確插入位置。最簡單的,可以採用順序查詢。將array[i]的值給乙個臨時變數temp。在自i-1起往前查詢的過程中,同時後移記錄。
int temp = array[i];
for (j = i - 1; j>=0&&temp< array[j]; j--)
array[j + 1] = array[j];
array[j + 1] = temp;
退出迴圈,說明找到了插入的位置,因為array[j]剛剛比較完畢,所以,j+1為正確的插入的位置,將待插記錄插入到有序表中。即:
array[j + 1] = temp;
演算法和測試**如下:
#include #include using namespace std;
void insertsort(int *array, int len)
int i, j;
for (i = 1; i < len;i++) }
void show(int *array, int len)
cout << endl;
}void main()
; int len = sizeof(array) / sizeof(array[0]);
insertsort(array, len);
show(array, len);
system("pause");
}
直接插入排序的最好的時間複雜度為o(n),最差和平均的時間複雜度為o(n*n),空間複雜度為o(1)
直接插入排序是一種穩定的排序的方法。
適用:當序列中的記錄基本有序或者待排序記錄較少時,它是最佳的排序的方法。
直接插入排序演算法總結
演算法思想 每次將乙個待排序的記錄按其關鍵字大小插入到前面已排好的子串行中,知道全部記錄插入完成。第一部分 排序演算法 9 3 直接插入排序 直接插入排序 void insertsort int a,int n 優化 折半插入排序 帶哨兵 void insertsort int a,int n fo...
排序演算法 插入排序 直接插入排序
package 插入排序 直接插入排序 從後向前找到合適位置後插入 穩定 基本思想 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。public class 直接插入排序 system.out.println 排序之前 fo...
排序演算法 插入排序 直接插入排序
當插入第i i 1 個元素時,前面的v 0 v i 1 等i 1個 元素已經有序。這時,將第i個元素與前i 1個元素v i 1 v 0 依次比較,找到插入位置即將v i 插入,同時原來位置上的元素向後順移。在這裡,插入位置的查詢是順序查詢。直接插入排序是一種穩定的排序演算法,其實現如下 public...