排序算法就是基础中的基础,程序员必知!
一、插入排序
1)简单插入排序
(1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。例:对9, 2, 7, 19, 100, 97排序
得到结果:
java代码:
1 package Insertion_Sort; 2 3 import java.util.Arrays; 4 5 /** 6 * 直接插入排序(Straigh Insertion Sort) 内部排序、O(n^2)、稳定 原理:从待排序的数中选出一个来,插入到前面的合适位置。 7 * 过程:思路上从待排序的数据中选出一个,插入到前面合适的位置, 耗时点在插入方面,合适的位置意味着我们需要进行比较找出哪是 8 * 合适的位置,举个例子:对于9,2,7,19,100,97,63,208,55,78这组数, 9 * 第一个数9前面没有,不做操作,当第一个数完后,剩下的数就是待排序的数, 我们将要从除去9开始的书中选出一个插入到前面合适的位置, 10 * 拿到2后,放在temp上,进行注释中的2处的代码, 2处的代码就是通过循环找出这个合适的位置, 发现比temp大的数,立即将该数向后移动一位 11 * (这样做的目的是:前面需要空出一位来进行插入), 最后通过注释3处的代码将数插入。 本排序适合:基本有序的数据 12 * 13 * @author cq 14 * 15 */ 16 public class Straigh_ISort { 17 18 static int data[] = { 9, 2, 7, 19, 100, 97, 63, 208, 55, 78 }; 19 20 public static void insertSort() { 21 int L = data.length; 22 int temp; 23 for (int i = 1; i < L; i++) {// -----1----- 24 if (data[i] < data[i - 1]) { 25 temp = data[i]; // 将待插入的记录用temp保存下来 26 int j = i - 1; 27 while ((j >= 0) && temp < data[j]) {// -----2----- 28 data[j + 1] = data[j]; // 比待插入记录大的位置后移 29 j--; 30 } 31 data[j + 1] = temp; // 插入到正确位置 -----3----- 32 } 33 } 34 } 35 36 static void print(int[] a) { 37 System.out.println(Arrays.toString(a)); 38 } 39 40 public static void main(String[] args) { 41 print(data); 42 insertSort(); 43 print(data); 44 45 } 46 47 }