Java面试题-算法题(排序算法)

排序算法整理(Java)

1. 直接插入排序(Insert Sort)

1.1 思路:

	1.将待排序序列分为有序区和无序区,初始时,有序区为待排序记录第一个,无序区为剩下所有。
	2.将无序区的第一个记录插入到有序区合适位置中,无序区记录减一,有序区加一。
	3.重复步骤2,到无序区没有记录为止。
算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。

1.2 算法实现

/**
     * 插入排序算法
     * 1.将数组分为有序区和无序区,初始有序区为数组第一个记录,无序区为剩下的记录。
     * 2.将无序区第一个记录插入到有序区的合适位置,有序区增加一个记录,无序区减少一个记录
     * 3.重复步骤二,直至无序区无记录。
     * @param array
     */
    public static void InsertSort(int [] array){
   
        for (int i = 1; i < array.length; i++) {
   //第一次比较
            int temp = array[i];                //记录下a[1]的值 a[1] = 64 ,无序区第一位
            int j = i;                          // j=1
            while ( j>0 && temp < array[j-1]){
     //比较 有序区第一位 无序区第一位  即a[1] < a[0]时,数据前移一位    j>0 防止数据下标溢出
                array[j] = array[j-1];          //a[1] = a[0]
                j--;                            // j=0
            }
            array[j] = temp;                    //把a[1] 的值存储到 a[0]  交换完成
        }                                       //之后第二次  i=2 比较部分执行两次 因为有序区有两个元素,如此类推,最后完成排序
        //printArray(array);
    }

2.希尔排序(Shell Sort)

2.1 思路:

基本上和插入排序相同
区别:每次循环的步长,通过减半的方式来实现
说明:基本原理和插入排序类似,不一样的地方在于。通过间隔多个数据来进行插入排序。
算法适用于少量数据的排序,时间复杂度为取决于n,是不稳定的排序方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值