天天看点

数据结构: 排序(插入排序)代码

i# 算法思想

  • 算法思想: 就好比我们抓纸牌,每次新抓入一张纸牌,从右到左寻找它的位置。
  • 第一次 看第一个元素,显然左边没有比他更小的元素了,所以它当前的位置就是0
  • 第二次 看第二个元素,和第一个元素比较,如果它小于第一个元素,则它的位置放到第一个元素的位置,否则就在原位置
  • 第三次 在这时,其实讲过前两次的排序i=0, i=1上的两个元素已经是有序的了。那么第三个元素首先和第二个元素相比较,如果它小于第二个元素则和第二个元素进行交换;然后再和第一个元素比较,如果小于第一个元素则继续和第一个元素交换。
  • 第i次排序,此时第0个元素和第i-1个元素已经是有序的了。所以第i个元素一次从第i-1到0去比较直到找到自己合适的位置。
  • 直到第n次

代码

package sort;

/**
 * 插入排序
 * 算法思想: 就好比我们抓纸牌,每次新抓入一张纸牌,从右到左寻找它的位置。
 * 第一次 看第一个元素,显然左边没有比他更小的元素了,所以它当前的位置就是0
 * 第二次 看第二个元素,和第一个元素比较,如果它小于第一个元素,则它的位置放到第一个元素的位置,否则就在原位置
 * 第三次 在这时,其实讲过前两次的排序i=0, i=1上的两个元素已经是有序的了。那么第三个元素首先和第二个元素相比较,如果它小于第二个元素则和的个元素进行交换
 * 然后再和第一个元素比较,如果小于第一个元素则继续和第一个元素交换。
 * 第i次排序,此时第0个元素和第i-1个元素已经是有序的了。所以第i个元素一次从第i-1到0去比较直到找到自己合适的位置。
 * 直到第n次
 */

public class InsertSort {
    public static void main(String[] args) {
        int[] arr = new int[]{2, 3, 4, 1, 11, 2, 37, 2};
        InsertSort sort = new InsertSort();
        sort.sort(arr);
        sort.show(arr);
    }


    public void sort(int[] a){
        for(int i = 0; i < a.length; i++){
            for (int j = i; j > 0; j--){
                /**
                 * 如果当前元素已经比i上的元素小了,则不再需要继续比较了,当前的位置就是它需要的位置
                 */
                if (a[j-1] < a[j]){
                    continue;
                }
                swap(j-1, j, a);
            }
        }
    }

    /**
     * 使用移位法
     *
     * @param a
     */
    public void sort2(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int temp = a[i];
            int j = i;
            while (j > 0) {
                if (temp < a[j - 1]) {
                    // 将j-1位置的值赋值给j, 相当于j-1位置的元素后移一位
                    a[j] = a[j - 1];
                    j--;
                }else{
                    //如果当前的值,大于j-1位置上的值,则说明该位置就是当前值应该在的位置
                    break;
                }

            }
            //最终j就是temp值应该存在的位置
            a[j] = temp;

        }
    }




    public void swap(int i, int j, int[] arr) {
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
    }


    public void show(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

           

继续阅读