插入排序法(思路及代码实现)
生活随笔
收集整理的這篇文章主要介紹了
插入排序法(思路及代码实现)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
插入排序法思想:
插入排序的基本思想是:把n個(gè)待排序的元素看成一個(gè)有序表和一個(gè)無序表,開始時(shí)有序表只包含一個(gè)元素,無序表中包含有n-1個(gè)元素,排序過程中每次從無序表中取出第一個(gè)元素,把它的排序碼依次與有序表元素的排序碼進(jìn)行比較,將它插入到有序表中的適當(dāng)位置,使之成為新的有序表。
下圖中的初始狀態(tài)時(shí),17就為有序表中的一個(gè)元素,剩下的元素都包含在無序表中,然后取數(shù)據(jù)3與17進(jìn)行比較,然后插入到合適的位置,依次循環(huán)。插入排序的插入次數(shù)是n-1次,也就是數(shù)組長(zhǎng)度-1次。
代碼實(shí)現(xiàn):
//插入排序法 public class InsertSort {public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = {100,20,40,1};insertSort(arr);}public static void insertSort(int[] arr) {for(int i = 1 ; i< arr.length;i++) {int insertVal = arr[i]; //定義待插入的數(shù)據(jù)int insertIndex = i-1; //定義待插入數(shù)據(jù)的前一個(gè)數(shù)據(jù)的下標(biāo)//insertIndex >= 0 判斷待插入數(shù)的前一個(gè)數(shù)下標(biāo) 是不是大于等于0 如果不是的話 寄說明下標(biāo)越界了 即保證數(shù)組不越界//insertVal < arr[insertIndex] 判斷待插入數(shù)是否小于前一位數(shù)據(jù) 如果小的話再去更換位置 while(insertIndex >= 0 && insertVal < arr[insertIndex]) { //這一步就是在待插入數(shù)小于前一位數(shù)的情況下 將前一位數(shù)后移 //注意:以上數(shù)組為例,移動(dòng)后的數(shù)組為{100,100,40,1} 并不是{20,100,40,1}//在一開始 我們就將待插入數(shù)取了出來 定義到了insertVal中 arr[insertIndex+1] = arr[insertIndex]; insertIndex--; }//當(dāng)跳出while循環(huán) 說明插入的位置已經(jīng)找到了 位置下標(biāo)為 inserIndex+1 //說明下位置下標(biāo)為什么是inserIndex+1 比如數(shù)組為{20,30,40}//當(dāng)30和20比較的時(shí)候 30比20大 就不需要移動(dòng)位置了 這是30應(yīng)該所處的位置下標(biāo)就是1//而insertIndex是0 所以 待插入數(shù)的位置下標(biāo)應(yīng)該是insertIndex + 1;arr[insertIndex + 1] = insertVal;System.out.println("第"+i+"次排序");System.out.println(Arrays.toString(arr));}}}冒泡排序
選擇排序
總結(jié)
以上是生活随笔為你收集整理的插入排序法(思路及代码实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 和oracle的区别
- 下一篇: 快速排序法(思想及代码实现)