【数据结构】【直接排序法】Java代码
public class 直接排序 {
/**
* 直接排序法 仅排序1轮
* @param arr 数组
* @param ji 基准索引,填写几,就以谁为基准进行一次划分
*/
public static void qsort(int[] arr, int ji) {
int l=0;
int r=arr.length-1;
while(l<r){
while(l<r&&arr[r]>arr[ji]) r--;
if(l<r) {
int temp=arr[r];
arr[r]=arr[ji];
arr[ji]=temp;
ji=r;
}
while(l<r&&arr[l]<arr[ji]) l++;
if(l<r) {
int temp=arr[l];
arr[l]=arr[ji];
arr[ji]=temp;
ji=l;
}
printarr(arr);
}
}
/**
* 直接排序法 多轮划分
* @param arr 数组
* @param lun 基准索引,填写0,则从0开始,以其为基准,进行划分
*/
public static void qsortAll(int[] arr, int lun) {
if((arr.length-1)==lun) return;
int ji=lun;
int l=0;
int r=arr.length-1;
while(l<r){
while(l<r&&arr[r]>arr[ji]) r--;
if(l<r) {
int temp=arr[r];
arr[r]=arr[ji];
arr[ji]=temp;
ji=r;
}
while(l<r&&arr[l]<arr[ji]) l++;
if(l<r) {
int temp=arr[l];
arr[l]=arr[ji];
arr[ji]=temp;
ji=l;
}
}
printarr(arr);
qsortAll(arr,++lun);
}
/**
* 用来输出数组
* @param arr 要输出的数组
*/
public static void printarr(int[] arr){
for (int i:arr) {
System.out.print(i+"\t");
}
System.out.println();
}
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
int[] arr = new int[]{410,10,80,9,70,4};
// int[] arr = new int[]{46,79,56,38,40,84};
qsortAll(arr, 0);
for (int i:arr) {
System.out.print(i+"\t");
}
}
}
// for(r=arr.length-1;r>0;r--){
// if(arr[r]<arr[ji]){
// int temp = arr[r];
// arr[r]=arr[ji];
// arr[ji]=temp;
// ji=r;
// printarr(arr);
// break;
// }
// }
// for(l=0;l<arr.length;l++){
// if(arr[l]>arr[ji]){
// int temp = arr[l];
// arr[l]=arr[ji];
// arr[ji]=temp;
// ji=l;
// printarr(arr);
// break;
// }
// }
版 权 声 明
作者:萌狼蓝天
QQ:3447902411(仅限技术交流,添加请说明方向)
转载请注明原文链接:https://www.cnblogs.com/mllt/p/sjjg_zjczf_20211229.html