java插入排序_Java程序要插入排序
java插入排序
Java程序插入示例的排序。 顯示了示例仿真以及時間復雜度。
插入排序是一種簡單的排序算法,可以一次構建一個最終的排序數組(或列表)。 它比冒泡排序有效得多,并且在大型列表上的效率比快速排序 ,堆排序或合并排序等效率更高。
我們可以使用迭代和遞歸方法來實現插入排序。 我們將在本文中使用迭代方法。 與遞歸相比,它很容易理解。
插入排序會重復掃描項目列表,每次以無序順序將項目插入其正確位置。
Java程序進行冒泡排序
2.插入排序算法:
根據數組準備算法,數組索引從0開始。
從索引i –> 1迭代到長度-1
分配鍵= A [i]; j = i – 1; 循環j> = 0和A [j]>鍵 A [j + 1] = A [j]; j = j – 1; 結束循環 A [j + 1] =鍵; 結束迭代。
該算法基于紙牌組工作。 挑選一張卡放在手中,然后再挑選另一張卡。 然后將第二個數字與第一個數字進行比較。 如果大于第一張,則將第二張卡放在右側。 如果少于,則在左側放置第二張卡。 請通過下面的示例仿真來更好地理解。
3.示例仿真:
插入排序的圖形示例。
4. Java程序對插入排序
package com.adeepdrive.data.structures.sorting; public class InsertionSortProgram { public static void main(String[] args) { // input array int [] inputArray = { 6 , 5 , 3 , 1 , 8 , 7 , 2 , 4 }; int length = inputArray.length; int j = 0 ; System.out.print( "Before Sorting: " ); printArray(inputArray); System.out.print( "\nValues for each Iteration" ); for ( int i = 1 ; i < length; i++) { j = i - 1 ; int key = inputArray[i]; while (j >= 0 && inputArray[j] > key) { inputArray[j + 1 ] = inputArray[j]; j = j - 1 ; } inputArray[j + 1 ] = key; System.out.println(); printArray(inputArray); } System.out.print( "\nAfter sorting: " ); printArray(inputArray); } private static void printArray( int [] inputArray) { for ( int value : inputArray) { System.out.print(value + " " ); } } }輸出:
排序前:6 5 3 1 8 7 2 4
每個迭代的值 5 6 3 1 8 7 2 4 3 5 6 1 8 7 2 4 1 3 5 6 8 7 2 4 1 3 5 6 8 7 2 4 1 3 5 6 7 8 2 4 1 2 3 5 6 7 8 4 1 2 3 4 5 6 7 8 排序后:1 2 3 4 5 6 7 8
我們將當前的迭代索引值存儲在鍵中,因為如果我們在條件上交換值。 在交換活動中,我們可能會損失該指數的原始價值。 為了避免數據丟失,我們將其存儲在臨時變量中。
在代碼中,我們從索引1開始,忽略索引0,因為索引o已經排序。
i = 1,鍵= 5
將鍵= 5與左側值進行比較。 即5.條件6> 5 –> true。 交換他們。 5 6 3 1 8 7 2 4
現在我= 2,鑰匙= 3
將鍵與其左側值進行比較并交換它們 6> 3 –> true –>交換–> 5 3 6 1 8 7 2 4 5> 3 –> true –>交換–> 3 5 6 1 8 7 2 4
現在我= 3,密鑰= 1
比較key(1)及其左側值并對它們進行排序。 6> 1 –> true –>交換–> 3 5 1 6 8 7 2 4 5> 1 –> true –>交換–> 3 1 5 6 8 7 2 4 3> 1 –> true –>交換–> 1 3 5 6 8 7 2 4
現在我= 4,關鍵= 8
比較key(8)及其左側值并對它們進行排序。 6> 8 –> false –>無交換。 這意味著所有左側值均已排序。
現在我= 5,關鍵= 7
比較key(7)及其左側值并對它們進行排序。 8> 7 –> true –>交換–> 1 3 5 6 7 8 2 4 6> 7 –> false –>無交換。 所有左側值均已排序。
現在我= 6,關鍵2
比較key(2)及其左側的值并對它們進行排序。 8> 2 –> true –>交換–> 1 3 5 6 7 2 8 4 7> 2 –> true –>交換–> 1 3 5 6 2 7 8 4 6> 2 –> true –>交換–> 1 3 5 2 6 7 8 4 5> 2 –> true –>交換–> 1 3 2 5 6 7 8 4 3> 2 –> true –>交換–> 1 2 3 5 6 7 8 4 1> 2 –> false –>無交換。 這意味著所有左側值均已排序。
現在我= 7,key4
比較key(4)和它的左側值并對它們排序。 8> 4 –> true –>交換–> 1 2 3 5 6 7 4 8 7> 4 –> true –>交換–> 1 2 3 5 6 4 7 8 6> 4 –> true –>交換–> 1 2 3 5 4 6 7 8 5> 4 –> true –>交換–> 1 2 3 4 5 6 7 8 3> 4 –>否–>無交換。 這意味著所有左側值均已排序。
到達數組末尾并停止處理。
最壞情況下的時間復雜度:O(n * n)
當所有值未排序時。 例如9 8 7 6 5 4 3 2 1
最佳情況下時間復雜度:O(n)
什么時候 全部已輸入已排序例如1 2 3 4 5 6 7 8 9 輔助空間:O(1)
6.插入排序優勢:
插入排序的主要優點是
1)其簡單性。 2)處理少量清單時,它也表現出良好的性能。 3)插入排序是一種就地排序算法,因此空間需求最小。
7.插入排序的缺點:
插入排序的缺點是
1)它的性能不及其他更好的排序算法。
2)對于每個要排序的n個元素都需要n個平方的步驟,因此插入排序不能很好地處理龐大的列表。 3)因此,插入排序僅在對幾個項目的列表進行排序時才特別有用。
翻譯自: https://www.javacodegeeks.com/2020/06/java-program-to-insertion-sort.html
java插入排序
總結
以上是生活随笔為你收集整理的java插入排序_Java程序要插入排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分解因数 递归_递归分解WAR文件
- 下一篇: java美元兑换,(Java实现) 美元