排序演算法(一) 插入排序

2021-06-26 02:11:11 字數 932 閱讀 7660

首先,對排序演算法

輸入: n 個數

輸出:序列的乙個排序, 使得a1'<=a2'...<=an'.

待排序的數為key

插入排序演算法,是乙個對少量元素進行排序的有效演算法.

其偽**如圖:

插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌放置在乙個合理的位置。 如下圖:

a = <5, 2, 4, 6, 1, 3>的排序過程,黑色的方塊表示key,灰色表示已經排好順序的

由圖可知,每個key在開始排序時,從已排序的元素中的最後乙個元素開始比較,直到找到比key小的元素時,將key插入這個元素之後。

**僅實現演算法描述的功能。為了避免混淆,**中的變數宣告盡量與演算法描述中的宣告一致。

程式**

/*

插入排序演算法的非遞迴實現

*/void insertsort(int a, int n)

a[i+1] = key;

} }

測試結果:

演算法分析:

插入排序使用增量的方法,在已經排好子陣列a[1..j-1]後,將a[j]插入,形成排好序的字陣列a[1..j]. 插入排序法在排序的過程中不用申請新空間。但是每插入乙個key,已排好序的元素大於key的部分就要向後移動。如果資料量很大或者陣列倒序排列,移動次數會非常多。

排序演算法(一) 插入排序

一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...

排序演算法 一 插入排序

演算法實現 insertsort.c include void insertsort int arr,int len int i 0,j 0,k 0 int tmp 0 for i 1 i 0 tmp演算法思想 保證被比較值的左側為有序,在將被比較的值插入到這個有序的佇列裡。例子分析 1.首先arr...

排序演算法(一)插入排序

在已經排好序的序列中插入乙個數值使其成為新的有序序列 教材定義 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中,直到全部記錄插入完成 教材的定義體現了在原序列上進行的一種排序 按照順序表的方式儲存的話,插入排序實際上就採用就地排序 空間複雜度o 1 每次都要從在已排好的子串行中...