首先,要了解快速排序的思想
1、存储:用数组存储要排序的数据。
2、排序:
(1):选择一个关键值key,一般是排序的第一个元素。
(2):从右边开始找出第一个比key小的值,放在key的左边。
(3):从左边开始找出第一个比key大的值,放在key的右边。
(4):重复(2)(3)步骤,将数据划分成两部分,左边比key小,右边比key大。
(5):然后再分别对key左右两边的数组进行快速排序。
总体思想是这样。编程的时候要注意好多地方。
注意:
1、这是一个递归,要有结束条件。
下面是代码:
import java.util.Scanner;
public class QuickSortWhile {
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int n;
System.out.println("输入排序总个数");
n=sc.nextInt();
int array[]=new int[n];
System.out.println("输入数据");
for(int i=0;i<n;i++){
array[i]=sc.nextInt();
}
int result[]=new int[n];
quicksort(0,n-1,array);
for(int i=0;i<n;i++){
System.out.println(array[i]);//输出结果
}
}
public static void quicksort(int m,int n,int A[]){
int low=m;
int high=n;
if(low>=high){//递归结束条件
return ;
}
int key=A[low];
while(low<high){
while(low<high&&key<=A[high])high--;//从右边找第一个小于key的值
if(low<high){//若找到了,则先判断是否符合要求,这点很重要
A[low]=A[high];//赋值
low++;//指针下移
}
while(low<high&&key>=A[low])low++;
if(low<high){
A[high]=A[low];
high--;
}
}
A[low]=key;//一遍排序完成,将数据分成两部分,最后将key值填充到low=high的位置
quicksort(m,low-1,A);//对左半边排序
quicksort(low+1,n,A);//对右半边排序
return ;
}
}