数据结构-插入排序(递归)

递归实现过程

  1. 第一次排序
    • 将数组第二个数和第一个数进行比较,如果第二个数小的话就放到第一个数前面
    • 第一次排序结束后排好的部分就有两个数了、
    • 下一次排序就从第三个数开始往前判断即可
  2. 之后的while循环排序
    • 判断当前数和前面的数的大小
    • 如果当前数小的话就换位置到前面,只要找到一个数比当前数更小就停止循环(因为排好序的部分可以保证前面的部分都会比当前数小了)
  3. while循环结束后
    • 将索引index++,指向数组下一个位置的数。如果没到数组末尾的话,就讲数组和index传入函数进行递归

递归实现代码

import java.util.Arrays;

/**
 * @author 小火娃
 * @project_name: my_project
 * @package_name: com.xiaohuowa.arraysort
 */
public class InsertSort {
    public static void main(String[] args) {
        int[] arr = new int[]{2,9,4,7,3,3,6,5};
        System.out.println("排序前数组:\t\t" + Arrays.toString(arr));
        insertSort(arr, 1);
        System.out.println("排序完成后数组:\t" + Arrays.toString(arr));
    }

    public static void insertSort(int[] arr, int index) {
        // 临时变量
        int temp = 0;
        // 定义p指针用于当次排序的循环判断
        int p = index;
        // 如果p指针没有到数组的起点,就一直循环
        while (p >= 0) {
            // 如果当前数比前一个数小的话,就换位置,否则退出循环
            if (arr[p] < arr[p-1]) {
                temp = arr[p-1];
                arr[p-1] = arr[p];
                arr[p] = temp;
            } else {
                break;
            }
            p--;
        }
        index++;
        if (index == arr.length-1) {
            return;
        }
        insertSort(arr, index);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值