Live2D

Java十大经典排序(含Java代码实现,备注清晰具体)

参考文章:https://blog.csdn.net/marcosyw/article/details/72794216

  最近编程学了十大经典排序,打算整理到博客上,但由于时间有限,所以会分批整理到此文章上。

一、快速排序

  首先要知道快排的原理。简单来说可分为三个步骤:

1、在要排序的数组中选出一个“基数”(通常选数组的第一位元素)
2、让数组中的元素与“基数”比较,比基数小则放左边,比基数大的则放右边
3、递归重复以上步骤。

  单看上面三个步骤还是很抽象的,接下来是具体如何操作:

1、第一点选出基数是用来比较的,就不过多赘述。

2、第二点实现的方式是在数组的起始和末端分别设定一个头指针(最左端)和一个尾指针(最右端)。若头指针指向的元素小于等于基数,则头指针向右移动一位,若比基数大,则与基数交换位置。尾指针相反,若比基数大或相等则向左移,比基数小则与基数换位。最后重复循环以上步骤,直到头尾指针重合。则可以做到以基数为基准,小的放其左,大的放其右
3、第三步骤就是以上一个基数为分界线,分为左半边和右半边,把左半边当成一个整体,重复第一和第二个步骤,右半边同理。即是递归,第一次排序完后不断的分为左半边和右半边,并将左半边与右半边不断排序,直到最终排序完成。
原理图如下:

下面是代码:

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {6, 1, 5, 4, 9, 2, 11, 7, 8, 1};
        int start = 0, end = arr.length - 1;     //定义数组的开头和结尾为Start和end,因为后续分为左右两半时起始位置和末尾位置会变化
        sort(arr, start, end);     //sort方法就为快速排序核心逻辑,调用排序方法,将数组与数组的始末位置传入方法
        for (int i : arr) {      //遍历数组
            System.out.print(i + "\t");
        }
    }

    public static void sort(int[] arr, int start, int end) {
        if (start > end){   //递归停止条件
            return;
        }
        int mid = start, s = start, e = end;  //定义基数为第start对应的元素,头指针和尾指针为数组起始和末尾索引
        int temp = 0;   //用于交换数组元素位置的中间变量
        while (s < e) { //循环以下操作直到头尾指针重合
            while (s < e && arr[mid] <= arr[e]) {   //若尾指针对应元素比基数大,则尾指针左移
                e--;
            }
            if (arr[mid] > arr[e]){     //若尾指针对应元素比基数小,则与基数交换位置
                temp = arr[mid];
                arr[mid] = arr[e];
                arr[e] = temp;
                mid = e;
            }
            while (s < e && arr[mid] >= arr[s]) {   //若头指针对应元素比基数小,则头指针左移
                s++;
            }
            if (arr[mid] < arr[s]){     //若头指针对应元素比基数大,则与基数交换位置
                temp = arr[mid];
                arr[mid] = arr[s];
                arr[s] = temp;
                mid = s;
            }
        }
       sort(arr, start, mid - 1);   //递归以上步骤的左半边
        sort(arr, mid + 1, end);    //递归以上步骤的右半边
    }
}
posted @ 2020-12-27 00:43  CatCode  阅读(159)  评论(0)    收藏  举报