学习记录
下图是转载的——侵删
快速排序思想:
快速排序是将一行数组无限分割,直到不能再分为止,通过递归进行划分。
方法简介:将每一段数组的首位数通过循环交换,将这个数放置中间位置(这里的中间指的是大小而不是距离)
具体如下图所示:
实现代码:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入需要排序的个数");
int n=scanner.nextInt();
int array[]=new int[n];
System.out.println("请输入排序的数字");
for(int i=0;i<n;i++){
array[i]=scanner.nextInt();
}
//下面试算法设计
int left=0; //最左边的数
int right=n-1;//最右边的数
qucikSort(array,left,right);
}
public static int Swap(int array[],int l,int r){
int left=l;
int right=r;
int value=array[left]; //先取出最左边的数
while(left!=right){ //判断是否达到中间位置
while(array[right]>value&&left!=right) {
right--;
}
if(left==right){
break;
}
array[left]=array[right];
left++;
while(array[left]<value&&left!=right){
left++;
}
if(left==right){
break;
}
array[right]=array[left];
right--;
}
array[left]=value;
return right; //返回中间数
}
public static void qucikSort(int array[],int left,int right){
//重合就return 因为左边的要小于右边的
if (left >= right)
{
return;
}
//调用快速排序方法,将数组和指针传入
int index = Swap(array, left, right);
//递归调用,分别对排序好的左右两小部分(左边小于原先基准数的数列 右边大于原先基准数的数列)进行重复步骤排序
for(int a:array){
System.out.print(a+" ");
}
System.out.println();
qucikSort(array, left, index - 1);//左边
qucikSort(array, index + 1, right);//右边
}