直接插入排序(内部排序)
生活随笔
收集整理的這篇文章主要介紹了
直接插入排序(内部排序)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 package com.trfizeng.insertionsort;
2
3 /**
4 *
5 * @author trfizeng 內(nèi)部排序 插入排序 --- 直接插入排序(Straight Insertion Sort)
6 *
7 */
8 public class StraightInsertionSort {
9 public static int[] straightInsertionSort(int[] array) {
10 // 對傳來的待排序數(shù)組進行合法驗證
11 if (array != null && array.length != 0) {
12 // 用來控制已排序好記錄下標
13 int j = 0;
14 // i = 0 把第一個當作是有序記錄,之后的全部看著無序記錄
15 for (int i = 1; i < array.length; i++) {
16 // 后一個跟有序記錄最后一個比較
17 if (array[i] < array[i - 1]) {
18 // 把比有序記錄最后一個小的數(shù)復(fù)制一份作為要插到有序記錄的數(shù),因為在賦值的過程會丟失
19 int temp = array[i];
20 // 覆蓋掉這個作為要插的記錄使之當前有序記錄數(shù) + 1
21 array[i] = array[i - 1];
22 // 因為在上面已經(jīng)比較過了和覆蓋過,所有要去除這2個數(shù)
23 j = i - 2;
24 // 拿著這個要插的數(shù)跟有序記錄一一對比,只要比當前有序記錄最后一個小的就把這個數(shù)后挪一位,為了保證插入排序是穩(wěn)定的,不能是<=
25 while (j >= 0 && temp < array[j]) {
26 // 使記錄后移
27 array[j + 1] = array[j];
28 // 比較過就除去,有序記錄數(shù) - 1
29 j--;
30 }
31 // 最后把要插的數(shù)插到該插的位置
32 array[j + 1] = temp;
33 }
34 }
35 }
36 return array;
37 }
38 } View Code 1 package com.trfizeng.test;
2
3 import com.trfizeng.insertionsort.StraightInsertionSort;
4
5 /**
6 * 測試類
7 *
8 * @author trfizeng
9 *
10 */
11 public class SortTest {
12 // 待排序數(shù)組
13 static int[] array = new int[] { 6, 1, 4, 10, 11, 8, 7, 1 };
14
15 /**
16 * 直接插入排序法測試
17 */
18 public static void straightInsertionSortTest() {
19 System.out.print("待排序數(shù)組:[ ");
20 for (int i = 0; i < array.length; i++) {
21 System.out.print(array[i] + " ");
22 }
23 System.out.print("] ");
24
25 array = StraightInsertionSort.straightInsertionSort(array);
26 System.out.print("排好序的數(shù)組:[ ");
27 for (int i = 0; i < array.length; i++) {
28 System.out.print(array[i] + " ");
29 }
30 System.out.print("]");
31 }
32
33 public static void main(String[] args) {
34 SortTest.straightInsertionSortTest();
35
36 }
37 } View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/trfizeng/p/4307725.html
總結(jié)
以上是生活随笔為你收集整理的直接插入排序(内部排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斐波那契递归算法
- 下一篇: 数据结构之查找算法:基本概念