1 package org.xiu68.exp.exp1;
2
3 public class Exp1_2 {
4 //实现快速排序算法,采用不同的方法实现线性划分的过程
5 public static void main(String[] args) {
6 int[] arr=new int[]{8,7,6,5,4,3,2,1,0};
7 quitSort(arr,0,arr.length-1);
8
9 for(int i=0;i<arr.length;i++)
10 System.out.print(arr[i]+",");
11 }
12
13 //快速排序算法
14 public static void quitSort(int[] r, int i,int j){
15 if(i<j){
16 int middle=partition2(r, i, j);
17 quitSort(r, i, middle-1);
18 quitSort(r, middle+1, j);
19 }
20 }
21
22 //快速排序第一种划分算法
23 public static int partition1(int[] r,int i,int j){
24 int temp=r[i];
25 while(i<j){
26 while(i<j && r[j]>=temp) //从j向前找比temp小的值
27 j--;
28
29 if(i<j)
30 r[i++]=r[j]; //将j指向的值移到i的位置,i往后移一个位置
31
32 while(i<j && r[i]<temp) //从i向后找比temp大的值
33 i++;
34
35 if(i<j)
36 r[j--]=r[i];
37 }
38
39 r[i]=temp;
40 return i;
41 }
42
43 //快速排序的第二种划分算法
44 public static int partition2(int[] r,int i,int j){
45 int temp=r[i];
46 while(i<j){
47 //从左往右找比temp大的值
48 while(i<j && r[i]<temp)
49 i++;
50 //从右往左找比temp小的值
51 while(i<j && r[j]>temp)
52 j--;
53
54 //i和j不是同一个位置
55 if(i<j){
56 int t=r[j];
57 r[j]=r[i];
58 r[i]=t;
59 }
60 }
61 return i;
62 }
63
64 }