数据结构之选择排序,插入排序,希尔排序

今天在学习数据结构的时候,把之前的资料重新看了看,又加深了自己对算法的理解

贴几个比较简单的算法,选择排序,插入排序,希尔排序

当然后每种排序都有自己的时间效率,这个效率就不贴出来了,当然下面的demo 也是看了《算法》这本书写出来的,自己共勉

import org.junit.Test;

/**
 * @author Eric
 * @date create in2018/8/10 19:53
 */
public class DemoTests {

    @Test
    public void testOfSort() {
        String[] a = {"a", "b","g","y", "c", "d", "p"};
         sort(a);
        System.out.println("=====================");
        chooseSort(a);
        System.out.println("=====================");
        shellSort(a);
        System.out.println("=====================");


    }

    /**
     * 插入排序
     * 实现思路:假设左边是有序的,但是他们的位置其实并不是确定的,
     * 因为后面来的元素会和他们做比较,插入相应位置,当索引到达数组的
     * 最右边的时候,排序就结束了
     * @param a
     */
    private void sort(Comparable a[]) {
        int N = a.length;
        for (int i = 1; i < N; i++) {
            for (int j = i; j >0 && less(a[j],a[j-1]) ; j--) {
                exch(a, j, j - 1);
            }
        }
        show(a);
    }

    /**
     *
     * 希尔排序
     * 实现思路:使任意间隔为h的元素都是有序的
     * @param a
     */
    private void shellSort(Comparable a[]) {
        int N = a.length;
        int h = 1;
        while (h < N / 3) {
            h = 3 * h + 1;
        }
        while (h >= 1) {
            for (int i = h; i < N; i++) {
                for (int j = i ; j>=h && less(a[j],a[j-h]) ; j-=h) {
                    exch(a,j,j-h);
                }
            }
            h /= 3;
        }
        show(a);
    }
    /**
     * 选择排序
     * 基本思路:就是在所有的元素中选择最小的元素放在第一的位置,
     * 再选择第二小的位置放在第二个位置一次类推
     * @param a
     */
    private void chooseSort(Comparable a[]) {
        int N = a.length;
        for (int i = 0; i < N; i++) {
            int min = i;
            for (int j = i+1; j < N; j++) {
                if (less(a[min],a[j])) {
                    min = j;
                }
            }
            exch(a, i, min);
        }
        show(a);
    }
    /**
    *
    *比较两者之间的大小
    */
    private boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }
    /**
    *
    *交换两者之间的位置
    */
    private void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    private void show(Comparable[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(" " + a[i]);


        }
        System.out.println(" ");

    }
}

这是自己

猜你喜欢

转载自blog.csdn.net/weixin_41650839/article/details/81569947