1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package sort.algorithm; import java.util.Stack; //快速排序的非递归实现,利用系统的栈stack public class QuickSortNonRecursion
{ public static void main(String[]
args) { QuickSortNonRecursion
qsnr = new QuickSortNonRecursion(); int []
array = { 0 , 2 , 11 , 121 , 18 , 99 , 3 , 5 , 101 , 22 , 9 , 100 }; qsnr.quicksort(array); for ( int i
: array) { System.out.print(i
+ "
" ); } } public void quicksort( int []
array) { if (array
== null ||
array.length == 1 ) return ; //存放开始与结束索引 Stack<Integer>
s = new Stack<Integer>(); //压栈 s.push( 0 ); s.push(array.length
- 1 ); //利用循环里实现 while (!s.empty())
{ int right
= s.pop(); int left
= s.pop(); //如果最大索引小于等于左边索引,说明结束了 if (right
<= left) continue ; int i
= partition(array, left, right); if (left
< i - 1 )
{ s.push(left); s.push(i
- 1 ); } if (i
+ 1 <
right) { s.push(i+ 1 ); s.push(right); } } } //找到轴心,进行交换 public int partition
( int []
data, int first, int end) { int temp; int i=first,j=end; if (first<end) { temp=data[i]; //当i=j的时候,则说明扫描完成了 while (i<j) { //从右边向左边扫描找到一个小于temp的元素 while (j>i&&data[j]>temp)j--; if (i<j) { //将该元素赋值给temp data[i]=data[j]; //赋值后就应该将i+1指向下一个序号 i++; } //然后从左边向右边开始扫描,找到一个大于temp的元素 while (i<j&&temp>data[i])i++; if (i<j) { //将该元素赋值给temp data[j]=data[i]; //赋值后就应该将j-1指向前一个序号 j--; } } //将轴数据放在i位置中 data[i]=temp; } return i; } } |
java版快速排序
最新推荐文章于 2022-10-27 19:20:12 发布