複習一:陣列(4)-插入排序
插入排序是一種簡單的排序方法。
思路:
每一步將一個待排序的資料插入到前面已經排好序的有序序列中,直到插完所有元素為止。
演算法實現:
直接插入排序是將無序序列中的資料插入到有序的序列中,在遍歷無序序列時,首先拿無序序列中的首元素去與有序序列中的每一個元素比較並插入到合適的位置,一直到無序序列中的所有元素插完為止。
public class insertSort {
public static void main(String[] args) {
int [] arr = {2,6,65,82,35,5,91,46};
System.out.println("原arr陣列:"+ Arrays.toString(arr));
for(int i=1;i<arr.length;i++){
for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.println("插入排序後的arr:"+Arrays.toString(arr));
}
}
執行結果:
時間複雜度: O(n²)
穩定性: 穩定
插入排序是穩定的排序演算法,滿足條件arr[j] > arr[j + 1]才發生交換,這個條件可以保證值相等的元素的相對位置不變。
優化:
上面的演算法的缺點:在第i-1趟插入時,需要把第i個元素插入到前面的i-1個元素中,該演算法總是從i-1個元素開始逐個比較之前的每個元素,直到找到第i個元素的插入位置,這顯然沒有利用前面0~i-1個元素已經有序的特點。
優化:在0~i-1個有序元素給第i個元素尋找插入的位置時,使用二分查詢法可以有效提高查詢插入位置的時間效率,經過優化的插入排序稱為折半插入排序,折半插入排序的時間複雜度為O(n*logn)
public class binaryInsertSort {
public static void main(String[] args) {
int [] arr = {2,6,65,82,35,5,91,46};
System.out.println("原arr陣列:"+ Arrays.toString(arr));
int j; // 內迴圈的j不能是區域性變數,否則陣列後面的較小數(5)將覆蓋arr陣列中間的部分
for(int i=1;i<arr.length;i++){
int temp = arr[i];
// L為有序部分陣列的左值,R為有序部分陣列的右值
int L = 0,R = i-1;
// mid 為有序部分陣列的中值
int mid;
while(L<=R){
mid = (L+R)/2;
if(arr[mid]>temp){
R =mid-1;
}else {
L =mid+1;
}
}
for(j=i-1;j>=R+1;j--){
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
System.out.println("插入排序後的arr:"+Arrays.toString(arr));
}
}
執行結果:
相關文章
- 字尾陣列複習陣列
- 將一個陣列複製到另一個陣列上陣列
- 4.陣列陣列
- 【一起學習排序演算法】4 插入排序排序演算法
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- PHP 陣列排序(複雜字串)PHP陣列排序字串
- JS 複製陣列和物件JS陣列物件
- iOS 模型陣列去重複iOS模型陣列
- 陣列學習陣列
- N4語法複習(一)
- 陣列合並且去重&向一個陣列新增一條資料(重複的就不新增)&陣列物件去重處理陣列物件
- Leetcode[陣列] 26. 刪除排序陣列中的重複項LeetCode陣列排序
- JavaScript 陣列隨機不重複元素JavaScript陣列隨機
- JavaScript陣列刪除重複元素JavaScript陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- C# unsafe 快速複製陣列C#陣列
- es6陣列去重複陣列
- 陣列中重複的數字陣列
- javascript 將一個陣列中的元素的值複製到另一個已有資料的陣列中JavaScript陣列
- 陣列的學習陣列
- JAVA 陣列 練習Java陣列
- 學習JSON陣列JSON陣列
- 重新學習一下陣列函式陣列函式
- PHP陣列學習之怎麼去除空白或者重複的元素PHP陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- 4-陣列-案例實戰陣列
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- 陣列004 動態建立一維陣列陣列
- 陣列(引用型別)複製問題陣列型別
- JavaScript陣列刪除重複內容JavaScript陣列
- JS中的陣列複製問題JS陣列
- 陣列去除重複的幾個方法陣列
- PHP陣列去除空白或重複元素PHP陣列
- JavaScript陣列(一)JavaScript陣列
- 一維陣列陣列
- 每日一題 [26] 刪除排序陣列中的重複項每日一題排序陣列