Java與算法之(9) - 直接插入排序
阿新 • • 發佈:2017-05-10
set reat 正是 stat copy boa 派生 creat 人的
直接插入排序是最簡單的排序算法,也比較符合人的思維習慣。想像一下玩撲克牌抓牌的過程。第一張抓到5,放在手裏;第二張抓到3,習慣性的會把它放在5的前面;第三張抓到7,放在5的後面;第四張抓到4,那麽我們會把它放在3和5的中間。
直接插入排序正是這種思路,每次取一個數,從前向後找,找到合適的位置就插進去。
代碼也非常簡單:
[java] view plain copy print?
- /**
- * 直接插入排序法
- * Created by autfish on 2016/9/18.
- */
- public class InsertSort {
- private int[] numbers;
- public InsertSort(int[] numbers) {
- this.numbers = numbers;
- }
- public void sort() {
- int temp;
- for(int i = 1; i < this.numbers.length; i++) {
- temp = this.numbers[i]; //取出一個未排序的數
- for(int j = i - 1; j >= 0 && temp < this.numbers[j]; j--) {
- this.numbers[j + 1] = this.numbers[j];
- this.numbers[j] = temp;
- }
- }
- System.out.print("排序後: ");
- for(int x = 0; x < numbers.length; x++) {
- System.out.print(numbers[x] + " ");
- }
- }
- public static void main(String[] args) {
- int[] numbers = new int[] { 4, 3, 6, 2, 7, 1, 5 };
- System.out.print("排序前: ");
- for(int x = 0; x < numbers.length; x++) {
- System.out.print(numbers[x] + " ");
- }
- System.out.println();
- InsertSort is = new InsertSort(numbers);
- is.sort();
- }
- }
測試結果:
[java] view plain copy print?
- 排序前: 4 3 6 2 7 1 5
- 排序後: 1 2 3 4 5 6 7
直接插入排序的時間復雜度,最好情況是O(n),最壞是O(n^2),平均O(n^2)。
Java與算法之(9) - 直接插入排序