View Code
1 package com.test.suanfa; 2 3 public class QuickSoft { 4 5 private void swap(int a[], int i, int j) { 6 int tmp = a[i]; 7 a[i] = a[j]; 8 a[j] = tmp; 9 } 10 11 private int partition(int a[], int p, int r) { 12 int point = a[r]; 13 // 将小于等于point的元素移到左边区域 14 // 将大于point的元素移到右边区域 15 int index = p; 16 for (int i = index; i < r; ++i) { 17 if (a[i] - point <= 0) { 18 swap(a, index++, i); 19 System.out.println(" 交换之后分组为~~~~~~~~~~~"+i+"~~~~~~~~~~~~~~~~~"); 20 for (int j = 0; j < a.length; j++) { 21 System.out.print(a[j]+" "); 22 } 23 System.out.println(); 24 //System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~"); 25 } 26 } 27 swap(a, index, r); 28 return index; 29 } 30 31 public void qsort(int a[], int p, int r) { 32 if (p < r) { 33 // 确定拆分点,并对数组元素进行移动 34 // 这是快速排序算法的关键步骤 35 int q = partition(a, p, r); 36 // 对左半段排序 37 qsort(a, p, q - 1); 38 // 对右半段排序 39 qsort(a, q + 1, r); 40 } 41 } 42 43 public static void main(String[] args) { 44 // 声明一个类 45 QuickSoft ms = new QuickSoft(); 46 int len = 10; 47 int a[]={5,1,2,9,3,0,8,4,7,6}; 48 // 初始化a数组 49 50 ms.partition(a, 0, len - 1); 51 for (int i = 0; i < a.length; i++) { 52 System.out.print(a[i]+" "); 53 } 54 System.out.println(); 55 System.out.println("---------------------"); 56 // 快速排序 57 ms.qsort(a, 0, len - 1); 58 59 System.out.println("排序后的数组如下:"); 60 for (int i = 0; i < a.length; i++) { 61 System.out.print(a[i]+" "); 62 } 63 64 } 65 }