排序详解

作者: 尹凯跃_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;

                    }

                }

            }

        }

    }

    相关文章

      网友评论

        本文标题:排序详解

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