快速排序
快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。
一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。
接着分别比较左右两边的序列,重复上述的循环。
代码:
package Sort; import java.util.Scanner; public class DemoFastSort { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int n=scan.nextInt(); int[] arr=new int[n]; for(int i=0;i<n;i++) { arr[i]=scan.nextInt(); } sort(arr,0,arr.length-1); for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } } public static void sort(int[] arr,int left,int right) { if(left>=right) { return; } else { int p=partion(arr,left,right);//中间的下标值 sort(arr,left,p-1); sort(arr,p+1,right); } } public static int partion(int[] arr,int left,int right) { int midIndex=left; for(int i=left+1;i<=right;i++) { if(arr[i]<arr[left]) { //交换 int temp=arr[midIndex+1]; arr[midIndex+1]=arr[i]; arr[i]=temp; midIndex++; } } //跟第一个元素交换 int temp=arr[left]; arr[left]=arr[midIndex]; arr[midIndex]=temp; return midIndex; } }