排序详解

作者: 尹凯跃_8期强化班 | 来源:发表于2022-03-12 19:08 被阅读0次

排序

1,快速排序又称分治排序

主要是运用了指针和递归的思想,运行速度极快,节约内存

public class 快速排序2 {

    public static void main(String[] args) {

        int[] arr = {1, 3, 6, 8, 9, 4, 2};

        kuaipai(arr, 0, arr.length - 1);

        for (int i=0;i<arr.length;i++){

            System.out.print(arr[i]+" ");

        }

    }

    public static void kuaipai(int[] arr, int left, int right) {//创建一个快拍的方法

        if (left > right) {

            return;//这种情况不能够存在

        }

        int base =arr [left];//定义最左边的为基准数

        int i = left;//定义两个指针,i是左指针j是右指针

        int j =right;

        while (i != j) {//表示俩个指针还没有相遇

            while (arr[j] >= base && i<j) {

                j--;//从右边开始检索,如果比基准数大的话继续检索

            }

            //跳出上面的循环说明检索到了比基准数小的数此时右指针停下

            while (arr[i] <= base && i<j) {

                i++;//这里和上面同理,就是左指针检索比基准数大的数之后会停下

            }

            //这里表示左指针检索到了比基准数大的数

            //这里把左右指针对应的元素进行换位,需要在引入一个变量充当中间量

            int temp = arr[i];

            arr[i] = arr[j];

            arr[j] = temp;//这样左右指针的元素就完成了交换,之后继续检索,直到跳出最大的循环

        }

        //表示此时两个指针相遇了,i=j

        //此时把基准数和指针对应的元素进行交换

      arr[left] = arr[i];

        arr[i] = base;//这里不用在引入变量。因为基准数和left是一样d

        //此时第一轮检索结束,还要对基准数两边进行检索,因为方法是可以调用的,所以我们在方法里面再次调用这个方法,自己调用自己又称 递归

        kuaipai(arr, left, i - 1);//对基准数左边的进行排序

        kuaipai(arr, j + 1, right);

    }

2,冒泡排序

每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了.

public class 冒泡排序 {

    public static void main(String[] args) {

              int []arr={9,4,7,3,8,1};

              maopao(arr);

              for (int i=0;i<arr.length;i++){

                  System.out.print(arr[i]+" ");//遍历OK了

              }

    }

public  static void maopao(int []arr){//写一个冒泡函数

        for (int i=0;i<arr.length-1;i++){//只用进行length-1次排序就可以了

            for (int j=0;j<arr.length-1-i;j++){  //y因为如果i=3说明他已经进行了3此排序那最后三个数的位置已经拍好了就不用再排,所以要减去i

            if (arr[j]>arr[j+1]){

                int temp=arr[j];

                arr[j]=arr[j+1];

                arr[j+1]=temp;//交换位置

            }

            }

        }

    }

}

3.java中使用Arrays.sort()排序对一个数组进行排序

  Arrays.sort(a);//全部元素排序

Arrays.sort(a, 0, 3);//部分排序,而且最后一个不进行排序,这里也就是下表为3的第四个数不进行排序。速度快但是不稳定

4.选择法排序

选择排序就是从第一趟开始,用第一个元素和剩下中的每一个元素比较,如果比第一

个小,就和第一个元素交换值,最后使得第一个元素中的值最小,第二趟选择出第二

小的放到第二元素,依次,使得数组有序。下面我们举例说明:

public class 选择排序 {

    public static void main(String[] args) {

        int arr[] = {1, 4, 6, 3, 8, 7};

        xuanze(arr);

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + " ");

        }

    }

    public static void xuanze(int arr[]) {

        for (int i = 0; i < arr.length; i++) {//第一层循环是控制循环的趟数

            for (int j = i + 1; j < arr.length; j++) {

                if (arr[i] > arr[j]) {

                    int temp = arr[i];

                    arr[i] = arr[j];

                    arr[j] = temp;

                }

            }

        }

    }

}

相关文章

  • iremaker排序

    iRemaker校对工具”自动排序“、”手动排序“、”排序为首页“、”序号变小“、”序号变大“功能介绍 要点详解 ...

  • 排序

    排序 快速排序 归并排序 计数排序 Python实现 理解 详解 稳定:如果a原本在b前面,而a=b,排序之后a仍...

  • Python 日常使用记录

    sorted排序 python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例,python...

  • Java 9种排序算法详解和示例汇总

    冒泡排序、选择排序、直接插入排序、二分法排序、希尔排序、快速排序、堆排序、归并排序、基数排序,共9中排序算法详解和...

  • 详解排序算法--希尔排序

    希尔排序 希尔排序的由来是根据插入排序的。读者若不了解插入排序,可以参考笔者的详解排序算法--插入排序和冒泡排序....

  • 快速排序优化详解

    原文地址:快速排序优化详解 正如它的名字所体现,快速排序是在实践中最快的已知排序算法,平均运行时间为O(NlogN...

  • 排序算法笔记

    总结 算法详解 tips:以下算法中均按从小到大排序 一 冒泡排序/Bubble Sort 思路 采用两两比较并交...

  • 快速排序

    Java快速排序图文详解 正文来自:https://www.cnblogs.com/ahalei/p/356843...

  • android 日常(七)

    Toolbar的使用详解 RecyclerView实现条目Item拖拽排序与滑动删除 打造最强RecyclerVi...

  • spring boot

    Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解

网友评论

    本文标题:排序详解

    本文链接:https://www.haomeiwen.com/subject/mxkddrtx.html