跟着黑马的ppt学习了,做下笔记。
快速排序:冒泡排序的改进,先定义分界值,比分界值小的放左边,比分界值大的放右边。然后各自取两边的数组进行递归。
关于Comparable:是一个实现对象支持自比较所需要实现的接口,如String、Integer自己就实现了Comparable接口,我们可以直接用他们的CompareTo ()方法来比较,或者直接对 List<String>或List<Integer> 集合进行排序。支持Integer,所以后面验证的时候可以用Integer定义整数数组。(百度翻译)
如图,以数组第一个元素,6,为分界值(黑马的ppt里截图的,黑马yyds)
函数方法:sort() 入口参数仅为一个数组的,和入口参数为数组、数组左索引、数组右索引的
Exch()交换数组里两个索引对应变量的值。
patition() 以数组第一个数为基准,分割数组,返回值为分割的索引
CompareSmaller 返回值boolean类型,比较两个数的大小
import javax.swing.*;
import java.util.Arrays;
public class QuickSorting {//快速排序
public static void sort(Comparable[] UnorderedArray){//入口参数只有一个数组的方法,里面调入口参数 数组,头尾索引的同名方法
int low = 0;//第一次调的时候,初始 low 和 high ,然后递归调用另一个同名方法
int high = UnorderedArray.length-1;
sort(UnorderedArray,low,high);
}
private static void sort(Comparable[] UnorderedArray,int Index_low,int Index_high){
//递归的最开始,给一个条件,防止无限循环
if (Index_low>=Index_high){
return;
}
int Index_mid = partition(UnorderedArray,Index_low,Index_high);
sort(UnorderedArray,Index_low,Index_mid-1);
sort(UnorderedArray,Index_mid+1,Index_high);
}
private static int partition(Comparable[] UnorderedArray,int Index_low,int Index_high){
//先分开,以第一个数为基准
int Index_Divider = Index_low;
int Left = Index_low;
int Right = Index_high+1;
//不断循环,左找比基准小,右边找比基准大,找到就换
while (true){//找的时候,左右相遇就停下
while (CompareSmaller(UnorderedArray[Index_Divider],UnorderedArray[--Right])){
if (Right<=Left){
break;
}
}
while (CompareSmaller(UnorderedArray[++Left],UnorderedArray[Index_Divider])){
if (Right<=Left){
break;
}
}
//两种情况从while中出来,只有找到了值得情况才交换索引处的值
if (Right<=Left){
break;
}else {
Exch(UnorderedArray,Left,Right);
}
}//最后还需要交换 基准值 和 下次分割的基准值
Exch(UnorderedArray,Right,Index_Divider);
return Right;
}
public static boolean CompareSmaller(Comparable Var_i,Comparable Var_j){
return Var_i.compareTo(Var_j) < 0;//比较两个变量大小的函数 小于返回true
}
public static void Exch(Comparable[] UnorderedArray,int Index_i,int Index_j){
Comparable InterVar = UnorderedArray[Index_i];
UnorderedArray[Index_i] = UnorderedArray[Index_j];
UnorderedArray[Index_j] = InterVar;
}
public static void main(String[] args) {
Integer[] array = {6,7,9,3,2,6,5,7};
sort(array);
System.out.println(Arrays.toString(array));
}
}