import java.util.Scanner; //快速排序 public class Main { /** * @param args */ private static int[] a;//定义的带排序的数组 //快速排序算法 public static void quicksort(int s,int e){ if(s>e){ return; } int standard = a[s]; int Llimit = s; int Rlimit = e; while(Rlimit>Llimit){ for(;Rlimit>Llimit;Rlimit--){ if(a[Rlimit]<standard){ break; } } for(;Rlimit>Llimit;Llimit++){ if(a[Llimit]>standard){ break; } } if(Llimit < Rlimit){ int temp = a[Llimit]; a[Llimit] = a[Rlimit]; a[Rlimit] = temp; } } a[s] = a[Llimit]; a[Llimit] = standard; quicksort(s,Llimit-1); quicksort(Rlimit+1,e); return; } //输出数组中的所有元素 public static void printArray(){ System.out.print("排序后的数组是: "); for (int i : a) { System.out.print(i+" "); } System.out.println(); } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); //接下来的两行一行为数组总数,第二行为数组中所包含的元素 int N = scanner.nextInt(); a = new int[N];//申请内存分配 for(int i=0;i<N;i++){ a[i] = scanner.nextInt(); } quicksort(0, N-1); printArray(); } }
关于算法思想,网上有许多很形象的叙述,如https://blog.csdn.net/vayne_xiao/article/details/53508973
这里我给出自己的JAVA实现,供大家参考。