前言
1.排序算法的分类
- 内部排序:
指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。 - 外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。 - 常见的排序算法分类
一、(Quick Sort)的基本概念
1.基本介绍
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2.执行逻辑
快排的执行逻辑:
- 首先需要选定一个基准数作为判断的数。
- 设置两个索引,一个指向最左边,一个指向最右边,左边的向右遍历,右边的向左遍历。遍历整个数据,把比基准数小的放在左边,比基准数大的放在右边。得到两类数组。
- 一类数组是比基准数小,另一类比基准数大。把这两类数组分别当做新的数组按第一步同理执行。
3.图解过程
假设出一个数组{6,2,8,5}进行排序,设置两个索引,设定arr[0]为基准数,初始化。
- 第一步是r索引先向左走找到比基准数6小的就停下来,所以r就停在数5的位置。之后就是L索引向右走找到比基准数大的数停下来,L停在8的位置。
然后交换数据
2.索引r继续向左走,当l=r的时候,把基准数的位置和位置为l(或者r)的数据交换。就可以得到。
得到基准数左边的数据小于或等于基准数,基准数右边的数据大于或等于基准数。之后再用同样的方法去把两部分的数据实现排序。在代码的实现使用递归的方式。
4.代码实现
package com.datastructure.sort;
import java.util.Arrays;
/**
* @author Hacah
* @date 2020/10/15 19:57
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int leftIndex,int rightIndex) {
if (leftIndex > rightIndex) {
return;
}
// 1、设定好变量
// 左边的索引
int l = leftIndex;
// 右边的索引
int r = rightIndex;
// 设定基数
int pivot = arr[leftIndex];
// 2、交换两边的数据,直到l=r停止
while (l < r) {
// 右边的索引先移动确保当l=r时arr[r]或者arr[l]是等于或小于pivot的。
// 为什么要保证这样?在代码里寻找。
while (pivot<=arr[r] && l < r) {
r--;
}
while (pivot>=arr[l] && l < r) {
l++;
}
if (l < r) {
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
// 3、让基准数在r=l的位置,且进行递归然后排序
// 交换基准数和r=l时arr[l]的数
arr[leftIndex] = arr[l];
arr[l] = pivot;
// 再递归排序
quickSort(arr,leftIndex,r-1);
quickSort(arr,r+1,rightIndex);
}
}
四、排序算法情况
相关文章:
《冒泡排序》的思想以及代码实现–排序算法(一)
《选择排序》的思想以及代码实现–排序算法(二)
《插入排序》的思想以及代码实现–排序算法(三)