複習一:陣列(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));
}
}
執行結果:
相關文章
- 字尾陣列複習陣列
- 複習資料結構:排序(一)——插入排序資料結構排序
- javascript如何複製一個陣列JavaScript陣列
- 將一個陣列複製到另一個陣列上陣列
- 4.陣列陣列
- 【一起學習排序演算法】4 插入排序排序演算法
- 一句程式碼搞定陣列去重(去除陣列中的重複元素)陣列
- 在陣列中找出唯一的重複元素陣列
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- N4語法複習(一)
- 陣列學習陣列
- PHP 陣列排序(複雜字串)PHP陣列排序字串
- iOS 模型陣列去重複iOS模型陣列
- javascript 陣列的深度複製JavaScript陣列
- JS 複製陣列和物件JS陣列物件
- C# 陣列的複製C#陣列
- C#中複製陣列C#陣列
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列
- 陣列合並且去重&向一個陣列新增一條資料(重複的就不新增)&陣列物件去重處理陣列物件
- android典型程式碼系列(十九)------將一個陣列複製成為另外一個陣列的方法Android陣列
- 陣列1——求一個陣列的最大子陣列陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- JavaScript 陣列隨機不重複元素JavaScript陣列隨機
- 陣列中重複的數字陣列
- js如何複製指定的陣列JS陣列
- es6陣列去重複陣列
- JavaScript陣列刪除重複元素JavaScript陣列
- 陣列的學習陣列
- JAVA 陣列 練習Java陣列
- plsql陣列學習SQL陣列
- 陣列練習題陣列
- javascript 將一個陣列中的元素的值複製到另一個已有資料的陣列中JavaScript陣列
- javascript實現複製一個陣列程式碼例項JavaScript陣列
- [分享]javascript 陣列以及物件的深拷貝(複製陣列或複製物件)的方法JavaScript陣列物件
- 重新學習一下陣列函式陣列函式
- PHP陣列學習之怎麼去除空白或者重複的元素PHP陣列
- 4-陣列-案例實戰陣列