我的快速排序 算法 Java实现。
View Code
1 /* 2 * 目的:实现 快速排序 算法 3 * 功能:对一组数据进行排序 4 * 作者:陈沛锐 5 * 时间:2013.04.04 6 * 7 * 经验积累: 8 * 1.递归函数中提前写好if()语句,防止漏写; 9 */ 10 package part02.chapter07; 11 12 import java.text.SimpleDateFormat; 13 import java.util.Date; 14 import java.util.Random; 15 import java.util.Scanner; 16 17 public class _1exercise { 18 19 public static void main(String[] args) { 20 System.out.println("请输入您要产生的数据量(整数表示):"); 21 Scanner myScanner = new Scanner(System.in); 22 int array_length = myScanner.nextInt(); 23 int[] A = new int[array_length]; 24 System.out.println("请输入数据中的最大值(整数表示):"); 25 int array_max = myScanner.nextInt(); 26 System.out.println("请输入数据中的最小值(整数表示):"); 27 int array_min = myScanner.nextInt(); 28 Random ran = new Random(); 29 System.out.println("随机产生的数据如下:"); 30 for (int i = 0; i < array_length; i++) { 31 A[i] = ran.nextInt(array_max - array_min + 1) + array_min; 32 System.out.print(A[i] + " "); 33 } 34 System.out.println(); 35 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 36 System.out.println(sdf.format(new Date())); 37 QUICKSORT quickSort = new QUICKSORT(); 38 quickSort.sort(A, 0, array_length - 1); 39 System.out.println(sdf.format(new Date())); 40 System.out.println(); 41 System.out.println("通过快速排序后的数据如下:"); 42 for (int i = 0; i < array_length; i++) { 43 System.out.print(A[i] + " "); 44 } 45 } 46 47 } 48 49 // 快速排序 50 class QUICKSORT { 51 public void sort(int[] A, int p, int r) { 52 if (p < r) {// 注意递归条件的判断 53 int j = partition(A, p, r); 54 sort(A, p, j - 1); 55 sort(A, j + 1, r); 56 } 57 } 58 59 public int partition(int[] A, int p, int r) { 60 int i = p - 1; 61 // 为了防止在for语句中每次都取出A[r]的值 62 int x = A[r]; 63 int temp = 0; 64 for (int j = p; j < r; j++) { 65 if (A[j] < x) { 66 i++; 67 temp = A[i]; 68 A[i] = A[j]; 69 A[j] = temp; 70 } 71 } 72 // 将i+1下标的值与A[j]进行交换 73 A[r] = A[i + 1]; 74 A[i + 1] = x; 75 return i + 1; 76 } 77 } 78 /** 79 * a sample output: 80 * 请输入您要产生的数据量(整数表示): 81 10 82 请输入数据中的最大值(整数表示): 83 20 84 请输入数据中的最小值(整数表示): 85 1 86 随机产生的数据如下: 87 4 11 3 13 15 7 3 13 3 16 88 通过快速排序后的数据如下: 89 3 3 3 4 7 11 13 13 15 16 90 */