演算法 插入排序與選擇排序

2021-09-21 02:20:53 字數 1548 閱讀 2405

一、插入排序

<1>、直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到一

個已經排好序的有序序列中,直到所有的記錄插入完為止,得到乙個新的有序序列

思想十分簡單,演算法實現如下:

//直接插入排序  越有序插入越快

//將每乙個數與前面所有排好序的數字相比較,如果大了 直接放入即可

public static void insertsort(int array)}}

}

直接插入排序的特性總結:元素集合越接近有序,直接插入排序演算法的時間效率越高

時間複雜度:o(n^2)空間複雜度:o(1),它是一種穩定的排序演算法

穩定性:穩定

<2>、希爾排序

希爾排序是優化過後的直接插入排序,大致**如下

具體演算法實現:

//雜湊排序  按組數分批次排序  是直接插入的優化

public static void shell(int array,int gap)}}

}public static void shellsort(int array);

for (int i = 0; i < drr.length; i++)

}

希爾排序的特性總結:希爾排序是對直接插入排序的優化。當gap > 1時都是預排序,目的是讓陣列更接近於有序。當gap == 1時,陣列已經接近有序的了,這樣就

會很快。這樣整體而言,可以達到優化的效果。我們實現後可以進行效能測試的對比。

希爾排序的時間複雜度不好計算,需要進行推導,推導出來平均時間複雜度:o(n1.3—n2)穩定性:不穩定

二、選擇排序

選擇排序是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的

資料元素排完。

大致**如下:

與直接插入演算法其實很類似且十分簡單容易理解,演算法實現如下:

public static void selectsort(int array){

for(int i=0;i直接選擇排序的特性總結

6. 直接選擇排序思考非常好理解,但是效率不是很好。實際中很少使用

7. 時間複雜度:o(n^2)

8. 空間複雜度:o(1)

9. 穩定性:不穩定

演算法之插入排序與選擇排序

選擇排序 1,選擇待排序陣列中的第i個元素 2,從它之後,也就是從第i 1個元素到最後乙個元素 n 中找到最小的元素,將其與1中選擇的元素互換 特點 排序過程中,前i個元素是排好序的 插入排序 1,將待排序陣列的第i個元素放入temp 2,向左移動一位,如果是比temp大的元素,就替換掉當前的元素 ...

選擇排序 與 插入排序

中心思想 通過一次遍歷後,將最小的元素放到 前面 以此類推 在遍歷過程中記錄位置的是下標索引 選擇排序 include using namespace std template typename t void selectsort t arr,int n swap arr i arr mininde...

《演算法》選擇排序 插入排序 氣泡排序

選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...