簡單通俗易懂學演算法 十大常用排序演算法(插入排序)

2021-09-18 05:00:55 字數 1308 閱讀 7207

上個一定能懂的**先:

// 進行簡單的元素位置交換

public static void swap(int arr, int i, int j)

// 插入排序操作

public static void insertshort(int arr) }}

}// 或者直接這麼寫:

public static void insertshort(int arr) }}

對上面的**進行簡單的優化一下:

public static void insertshort(int arr) 

arr[j] = t;}}

加入二分查詢進行插入排序:

public static void bininsertsort(int arr) 

}/**

*傳入查詢元素的下標索引(此元素已經儲存在此陣列中),查詢目標元素的前面所有元素是否存在和目標元素相等的值,存在則返回第一次出現的索引位置,若不存在則返回插入位置(取反之後再減去1)

*@param arr 待排序的陣列

*@param targetindex 查詢元素的索引

*/private static int binsearch(int arr, int targetindex) else if(arr[targetindex] < arr[mid]) else

}return -start - 1;

}private static void move(int arr, int start, int num)

for (int i = start + num; i > start; i--)

}

或者是:

public static void bininsertsort(int arr)  else 

}for (int j = i - 1; j >= low; j--)

arr[low] = temp;}}

當然你也可以用其他的實現方式,重要的是掌握這個演算法的思想。序演算法是一種穩定的排序演算法,比直接插入演算法明顯減少了關鍵字之間比較的次數,因此速度比直接插入排序演算法快,但記錄移動的次數沒有變,所以折半插入排序演算法的時間複雜度仍然為

折半插入排序的記錄比較次數與初始序列無關。因為每趟排序折半尋找插入位置時,折半次數是一定的,折半一次就要比較一次,所以比較次數也是一定的。

折半查詢只是減少了比較次數,但是元素的移動次數不變,所以時間複雜度為

字典排序演算法(通俗易懂)

我們先看乙個例子。示例 1 2 3的全排列如下 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 我們這裡是通過字典序法找出來的。那麼什麼是字典序法呢?從上面的全排列也可以看出來了,從左往右依次增大,對這就是字典序法。可是如何用演算法來實現字典序法全排列呢?你主要看紅色字型部分...

(十)通俗易懂理解 EM演算法

這篇文章不涉及數學原理上的說明,用簡單的例子說明了em演算法的出彩之處。001 乙個非常簡單的例子 假設現在有兩枚硬幣1和2,隨機拋擲後正面朝上概率分別為p1,p2。為了估計這兩個概率,做實驗,每次取一枚硬幣,連擲5下,記錄下結果,如下 可以很容易地估計出p1和p2,如下 p1 3 1 2 15 0...

排序演算法 史上最通俗易懂的 選擇排序 詳解

從待排序的n個資料中,每一趟在n i 1個元素中選擇值最小的元素作為有序序列中的第i個元素,從而達到排序的目的。簡單說就是 第一趟 在n個元素中選擇最小的元素與待排序數列的第乙個元素交換第二趟 在第2 n個元素中選擇最小的元素與待排序數列的第二個元素交換第三趟 在第3 n個元素中選擇最小的元素與待排...