java实现快速排序、选择排序、冒泡排序、插入排序

导读:本篇文章讲解 java实现快速排序、选择排序、冒泡排序、插入排序,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、快速排序

算法思想:

用左右两个指针和一个基准数进行操作,不断递归分而治之。

亲自制作了个动画来形象的演示:

快速排序算法动画演示

(演示动画和快速排序PPT下载:百度云,提取码:q7h1)

代码如下:

public class QuickSort {
    public static int[] sort(int[] array) {
        if (null == array) {
            return null;
        }
        return QuickSort.sortd(array, 0, array.length - 1);
    }
    

    public static int[] sortd(int[] array, int left, int right) {
        if (left < right) {
            int point = QuickSort.getLocation(array, left, right);
            sortd(array, left, point - 1);
            sortd(array, point + 1, right);
        }
        return array;
    }


    public static int getLocation(int[] array, int left, int right ) {
        int tmp = array[left];
        while (left < right) {
            while (left < right && array[right] >= tmp) {
                right--;
            }
            array[left] = array[right];
            while (left < right && array[left] <= tmp) {
                left++;
            }
            array[right] = array[left];
        }
        array[left] = tmp;
        return left;
    }
}

测试:

		int[] array = new int[]{5, 3, 2, 4, 6, 4, 7, 3, 1, 6};
        System.out.println(Arrays.toString(QuickSort.sort(array)));

二、选择排序

算法思想:

1.在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
2.第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。
3.重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。
*
代码如下:*

public class SelectSort {
    public static int[] sort(int[] array) {
        if (null == array) {
            return null;
        }

        int length = array.length;
        for (int i = 0; i < length; i++) {
            int minPoint = i;
            for (int j = i; j < length; j++) {
            	//<为升序,>为降序
                if (array[j] < array[minPoint]) {
                    minPoint = j;
                }
            }
            int temp = array[i];
            array[i] = array[minPoint];
            array[minPoint] = temp;
        }
        return array;
    }
}

测试:

		int[] array = new int[]{5, 3, 2, 4, 6, 4, 7, 3, 1, 6};
        System.out.println(Arrays.toString(SelectSort.sort(array)));

三、冒泡排序

算法思想:

1.比较相邻两个数据如果。第一个比第二个大,就交换两个数

2.对每一个相邻的数做同样第一步的工作,这样从开始一队到结尾一队在最后的数就是最大的数。

3.针对所有元素上面的操作,除了最后一个。

4.重复1~3步骤,知道顺序完成。

代码如下:

public class BubbleSort {
    public static int[] sort(int[] array) {
        if (null == array) {
            return null;
        }
        int length = array.length;
        for (int i = 0; i < length; i++) {
            for (int j = 0; j <  length -i- 1; j++) {
            	//>为升序,<为降序
                if (array[j] > array[j + 1]) {
                    int temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
}

测试:

		int[] array = new int[]{5, 3, 2, 4, 6, 4, 7, 3, 1, 6};
        System.out.println(Arrays.toString(BubbleSort.sort(array)));

四、插入排序

算法思想:

1.从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果 符合条件(比前面的大或者小,自定义),则让他们交换位置。

2.然后再用第三个数和第二个比较,符合则交换,但是此处还得继续往前比较,比如有 5个数8,15,20,45, 17,17比45小,需要交换,但是17也比20小,也要交换,当不需 要和15交换以后,说明也不需要和15前面的数据比较了,肯定不需要交换,因为前 面的数据都是有序的。

3.重复步骤二,一直到数据全都排完。

代码如下:

public class InsertSort {
    //array[j] >= array[i]为降序,改为<=则为升序
    public static int[] sort(int[] array) {
        if (null == array) {
            return null;
        }
        for (int i = 1; i < array.length; i++) {
            for (int j = 0; j <= i; j++) {
                //>=为升序,<=为降序
                if (array[j] >= array[i]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
}

参考:
快速排序—(面试碰到过好几次)

三大经典排序 | 冒泡排序,选择排序,快速排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/80304.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!