选择排序,插入排序以及希尔排序

2021-07-15 19:07

阅读:690

标签:lse   return   ...   ++   .com   索引   com   bool   []   

1. 选择排序

  1. 首先,找到数组中最小的那个元素;
  2. 将它与数组中的第一个元素交换位置;
  3. 在剩下的数组中找到最小的元素,和数组的第二个元素交换位置,如此循环往复;
public class Selection{

    // 将数组a按升序排列
    public static void sort(Comparable[] a){
        int N = a.length;
        for(int i = 0; i 

2. 插入排序

  • 当前索引左边的所有元素都是有序的;
  • 更小的元素插入之前,需要将比它的元素右移一位;
public class Insertion{
    public static void sort(Comparable[] a){
        int N = a.length;
        for(int i = 1; i  0 && less(a[j], a[j - 1]); j--){
                exch(a, j, j-1);
            }
        }
    }
}

3. 希尔排序

  • 基于插入排序;
  • 插入排序只会交换相邻元素;希尔排序交换不相邻元素,以及对数组局部排序;
  • 希尔排序的思想是使数组中任意间隔为h的元素都是有序的;
public class Shell(){
    public static void sort(Comparable[] a){
        int N = a.length;
        int h = 1;
        while(h = 1){
            // 将数组变为h有序
            for(int i = h; i = h && less(a[j], a[j - h]); j -= h){
                    exch(a, j, j-h);
                }
            }
            h = h/3;
        }
    }
}

参考资料:

  • 算法(红皮书)

选择排序,插入排序以及希尔排序

标签:lse   return   ...   ++   .com   索引   com   bool   []   

原文地址:https://www.cnblogs.com/linkworld/p/9535845.html


评论


亲,登录后才可以留言!