看完啊哈算法后用Java实现:
/*
我的Java快速排序
*/
import java.util.Arrays;
import java.util.Scanner;
@SuppressWarnings("all")
public class QuiclkSort {
static Scanner sc= new Scanner(System.in);
static int n0=sc.nextInt();
static int []nums=new int[n0];//6 1 2 7 9 3 4 5 10 8
static int n=nums.length;
public QuiclkSort(int first,int finals){//通过构造函数调用各函数 while循环版快速排序
for(int z=0;z<n;z++){
nums[z]=sc.nextInt();
}
quiclkSort(first,finals);
System.out.println(Arrays.toString(nums));
}
public static void main(String[] args) {
new QuiclkSort(0,n-1);
}
public void quiclkSort(int left,int right){
if(left>right)
return;
//一次排序代码:
int i,j,t,temp;
i=left;
j=right;
temp=nums[left];//初始化temp为基准数
while(i!=j){//i J相遇则停止循环
//j先移动
while(nums[j]>=temp&&j>i)//j向左移动,直至找到小于基准数的数字,就停止移动,并且不能小于i
j--;
while(nums[i]<=temp&&j>i)//i向右移动,直至找到大于基准数的数字,就停止移动,并且不能大于j
i++;
if(j>i){
//如果i与j相遇了 则让基准数归位 不是交换基准数变量与最后相遇的那个数,而是直接交换基准数位置上的数字和相遇的数字
t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
}
nums[left]=nums[i];
nums[i]=temp;
//由于接下来是分两边开始让基准数归位,故一个函数无法解决,使用递归思想,实现方式不变,改变起始左右起点即可
quiclkSort(left,i-1);
quiclkSort(i+1,right);
}
}