【Java算法】快速全排序算法

时间:2022-11-17 12:07:40

全排序简介

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

如1,2,3三个元素的全排列为:   
1,2,3   
1,3,2   
2,1,3   
2,3,1   
3,1,2   
3,2,1

 

算法分析


1)为了方便扩展,采用char数组来保存字符串,字符数字可以定义ASCII中的符号(0-9,A-Z之类的);
2)对于N个不同元素的全排序序列有N!种,输出了按编号1,2,3,4....N!输出;
3)第一个序列是所有元素的升序排列,最后一个序列是所有元素的降序排列;
4)设计一个方法从当前序列获取下一个序列,若序列是所有元素的降序排列,全排序结束;
   具体做法:①从序列的最后一个位置开始扫描,找出第一个当前字符比前一个字符大的位置,若无此位置标示,算法结束;
             ②将此位置的前一个字符放和后面的第一个比其大的字符交互,交互后位置之后的字符为降序排列;
             ③将以位置开始的降序变为升序,获得下一个序列
             ④重复①到③至算法结束。

 

程序

package test;

public class TotalSort {
// 初始系列,原则上要求按ASCII码升序排序(无重复)
private static char[] charStr = {'1','2','9','A','B','C'};
/**
* @param args
*/
public static void main(String[] args) {
int count = 0;
while(true){// 在getNext方法中输出当前序列,并获取下一个数列,若全排序结束,程序结束。
if(getNext(++count)) break;
}
}

/**
*
* @param count 表示第count个序列
* @return 全排序是否结束,结束返回true,否则返回false
*/
public static boolean getNext(int count) {
int i,j,n = charStr.length;
char tmp;

// 输出字符序列
System.out.print(count + " : ");
for(i = 0; i < n; i++)
System.out.print(charStr[i]);
System.out.println();

// 寻找当前字符比前一个字符大的字符的位置
for(i = n-1; i > 0; i--)
if(charStr[i] > charStr[i-1]) break;

// 根据位置进行重排
if(i == 0){ // 位置为0,全排序结束
return true;
}
else{ // 获取下一个序列
for(j = n-1; j >= i; j--){// 前一个位置的数和特定数字交互
if((charStr[j] - charStr[i - 1]) > 0){
// 交互位置
tmp = charStr[i-1];
charStr[i-1] = charStr[j];
charStr[j] = tmp;
break;
}
}
// 将位置以后的字符重新排序(降序变升序)
for(j = i; j < (i + n )/2; j++){
tmp = charStr[j];
charStr[j] = charStr[i + n - 1 - j];
charStr[i + n - 1 - j] = tmp;
}
}
return false;
}
}

 

运行结果

1 : 129ABC
2 : 129ACB
3 : 129BAC
4 : 129BCA
5 : 129CAB
6 : 129CBA
7 : 12A9BC
8 : 12A9CB
9 : 12AB9C
10 : 12ABC9
11 : 12AC9B
12 : 12ACB9
13 : 12B9AC
14 : 12B9CA
15 : 12BA9C
16 : 12BAC9
17 : 12BC9A
18 : 12BCA9
19 : 12C9AB
20 : 12C9BA
21 : 12CA9B
22 : 12CAB9
23 : 12CB9A
24 : 12CBA9
25 : 192ABC
26 : 192ACB
27 : 192BAC
28 : 192BCA
29 : 192CAB
30 : 192CBA
31 : 19A2BC
32 : 19A2CB
33 : 19AB2C
34 : 19ABC2
35 : 19AC2B
36 : 19ACB2
37 : 19B2AC
38 : 19B2CA
39 : 19BA2C
40 : 19BAC2
41 : 19BC2A
42 : 19BCA2
43 : 19C2AB
44 : 19C2BA
45 : 19CA2B
46 : 19CAB2
47 : 19CB2A
48 : 19CBA2
49 : 1A29BC
50 : 1A29CB
51 : 1A2B9C
52 : 1A2BC9
53 : 1A2C9B
54 : 1A2CB9
55 : 1A92BC
56 : 1A92CB
57 : 1A9B2C
58 : 1A9BC2
59 : 1A9C2B
60 : 1A9CB2
61 : 1AB29C
62 : 1AB2C9
63 : 1AB92C
64 : 1AB9C2
65 : 1ABC29
66 : 1ABC92
67 : 1AC29B
68 : 1AC2B9
69 : 1AC92B
70 : 1AC9B2
71 : 1ACB29
72 : 1ACB92
73 : 1B29AC
74 : 1B29CA
75 : 1B2A9C
76 : 1B2AC9
77 : 1B2C9A
78 : 1B2CA9
79 : 1B92AC
80 : 1B92CA
81 : 1B9A2C
82 : 1B9AC2
83 : 1B9C2A
84 : 1B9CA2
85 : 1BA29C
86 : 1BA2C9
87 : 1BA92C
88 : 1BA9C2
89 : 1BAC29
90 : 1BAC92
91 : 1BC29A
92 : 1BC2A9
93 : 1BC92A
94 : 1BC9A2
95 : 1BCA29
96 : 1BCA92
97 : 1C29AB
98 : 1C29BA
99 : 1C2A9B
100 : 1C2AB9
101 : 1C2B9A
102 : 1C2BA9
103 : 1C92AB
104 : 1C92BA
105 : 1C9A2B
106 : 1C9AB2
107 : 1C9B2A
108 : 1C9BA2
109 : 1CA29B
110 : 1CA2B9
111 : 1CA92B
112 : 1CA9B2
113 : 1CAB29
114 : 1CAB92
115 : 1CB29A
116 : 1CB2A9
117 : 1CB92A
118 : 1CB9A2
119 : 1CBA29
120 : 1CBA92
121 : 219ABC
122 : 219ACB
123 : 219BAC
124 : 219BCA
125 : 219CAB
126 : 219CBA
127 : 21A9BC
128 : 21A9CB
129 : 21AB9C
130 : 21ABC9
131 : 21AC9B
132 : 21ACB9
133 : 21B9AC
134 : 21B9CA
135 : 21BA9C
136 : 21BAC9
137 : 21BC9A
138 : 21BCA9
139 : 21C9AB
140 : 21C9BA
141 : 21CA9B
142 : 21CAB9
143 : 21CB9A
144 : 21CBA9
145 : 291ABC
146 : 291ACB
147 : 291BAC
148 : 291BCA
149 : 291CAB
150 : 291CBA
151 : 29A1BC
152 : 29A1CB
153 : 29AB1C
154 : 29ABC1
155 : 29AC1B
156 : 29ACB1
157 : 29B1AC
158 : 29B1CA
159 : 29BA1C
160 : 29BAC1
161 : 29BC1A
162 : 29BCA1
163 : 29C1AB
164 : 29C1BA
165 : 29CA1B
166 : 29CAB1
167 : 29CB1A
168 : 29CBA1
169 : 2A19BC
170 : 2A19CB
171 : 2A1B9C
172 : 2A1BC9
173 : 2A1C9B
174 : 2A1CB9
175 : 2A91BC
176 : 2A91CB
177 : 2A9B1C
178 : 2A9BC1
179 : 2A9C1B
180 : 2A9CB1
181 : 2AB19C
182 : 2AB1C9
183 : 2AB91C
184 : 2AB9C1
185 : 2ABC19
186 : 2ABC91
187 : 2AC19B
188 : 2AC1B9
189 : 2AC91B
190 : 2AC9B1
191 : 2ACB19
192 : 2ACB91
193 : 2B19AC
194 : 2B19CA
195 : 2B1A9C
196 : 2B1AC9
197 : 2B1C9A
198 : 2B1CA9
199 : 2B91AC
200 : 2B91CA
201 : 2B9A1C
202 : 2B9AC1
203 : 2B9C1A
204 : 2B9CA1
205 : 2BA19C
206 : 2BA1C9
207 : 2BA91C
208 : 2BA9C1
209 : 2BAC19
210 : 2BAC91
211 : 2BC19A
212 : 2BC1A9
213 : 2BC91A
214 : 2BC9A1
215 : 2BCA19
216 : 2BCA91
217 : 2C19AB
218 : 2C19BA
219 : 2C1A9B
220 : 2C1AB9
221 : 2C1B9A
222 : 2C1BA9
223 : 2C91AB
224 : 2C91BA
225 : 2C9A1B
226 : 2C9AB1
227 : 2C9B1A
228 : 2C9BA1
229 : 2CA19B
230 : 2CA1B9
231 : 2CA91B
232 : 2CA9B1
233 : 2CAB19
234 : 2CAB91
235 : 2CB19A
236 : 2CB1A9
237 : 2CB91A
238 : 2CB9A1
239 : 2CBA19
240 : 2CBA91
241 : 912ABC
242 : 912ACB
243 : 912BAC
244 : 912BCA
245 : 912CAB
246 : 912CBA
247 : 91A2BC
248 : 91A2CB
249 : 91AB2C
250 : 91ABC2
251 : 91AC2B
252 : 91ACB2
253 : 91B2AC
254 : 91B2CA
255 : 91BA2C
256 : 91BAC2
257 : 91BC2A
258 : 91BCA2
259 : 91C2AB
260 : 91C2BA
261 : 91CA2B
262 : 91CAB2
263 : 91CB2A
264 : 91CBA2
265 : 921ABC
266 : 921ACB
267 : 921BAC
268 : 921BCA
269 : 921CAB
270 : 921CBA
271 : 92A1BC
272 : 92A1CB
273 : 92AB1C
274 : 92ABC1
275 : 92AC1B
276 : 92ACB1
277 : 92B1AC
278 : 92B1CA
279 : 92BA1C
280 : 92BAC1
281 : 92BC1A
282 : 92BCA1
283 : 92C1AB
284 : 92C1BA
285 : 92CA1B
286 : 92CAB1
287 : 92CB1A
288 : 92CBA1
289 : 9A12BC
290 : 9A12CB
291 : 9A1B2C
292 : 9A1BC2
293 : 9A1C2B
294 : 9A1CB2
295 : 9A21BC
296 : 9A21CB
297 : 9A2B1C
298 : 9A2BC1
299 : 9A2C1B
300 : 9A2CB1
301 : 9AB12C
302 : 9AB1C2
303 : 9AB21C
304 : 9AB2C1
305 : 9ABC12
306 : 9ABC21
307 : 9AC12B
308 : 9AC1B2
309 : 9AC21B
310 : 9AC2B1
311 : 9ACB12
312 : 9ACB21
313 : 9B12AC
314 : 9B12CA
315 : 9B1A2C
316 : 9B1AC2
317 : 9B1C2A
318 : 9B1CA2
319 : 9B21AC
320 : 9B21CA
321 : 9B2A1C
322 : 9B2AC1
323 : 9B2C1A
324 : 9B2CA1
325 : 9BA12C
326 : 9BA1C2
327 : 9BA21C
328 : 9BA2C1
329 : 9BAC12
330 : 9BAC21
331 : 9BC12A
332 : 9BC1A2
333 : 9BC21A
334 : 9BC2A1
335 : 9BCA12
336 : 9BCA21
337 : 9C12AB
338 : 9C12BA
339 : 9C1A2B
340 : 9C1AB2
341 : 9C1B2A
342 : 9C1BA2
343 : 9C21AB
344 : 9C21BA
345 : 9C2A1B
346 : 9C2AB1
347 : 9C2B1A
348 : 9C2BA1
349 : 9CA12B
350 : 9CA1B2
351 : 9CA21B
352 : 9CA2B1
353 : 9CAB12
354 : 9CAB21
355 : 9CB12A
356 : 9CB1A2
357 : 9CB21A
358 : 9CB2A1
359 : 9CBA12
360 : 9CBA21
361 : A129BC
362 : A129CB
363 : A12B9C
364 : A12BC9
365 : A12C9B
366 : A12CB9
367 : A192BC
368 : A192CB
369 : A19B2C
370 : A19BC2
371 : A19C2B
372 : A19CB2
373 : A1B29C
374 : A1B2C9
375 : A1B92C
376 : A1B9C2
377 : A1BC29
378 : A1BC92
379 : A1C29B
380 : A1C2B9
381 : A1C92B
382 : A1C9B2
383 : A1CB29
384 : A1CB92
385 : A219BC
386 : A219CB
387 : A21B9C
388 : A21BC9
389 : A21C9B
390 : A21CB9
391 : A291BC
392 : A291CB
393 : A29B1C
394 : A29BC1
395 : A29C1B
396 : A29CB1
397 : A2B19C
398 : A2B1C9
399 : A2B91C
400 : A2B9C1
401 : A2BC19
402 : A2BC91
403 : A2C19B
404 : A2C1B9
405 : A2C91B
406 : A2C9B1
407 : A2CB19
408 : A2CB91
409 : A912BC
410 : A912CB
411 : A91B2C
412 : A91BC2
413 : A91C2B
414 : A91CB2
415 : A921BC
416 : A921CB
417 : A92B1C
418 : A92BC1
419 : A92C1B
420 : A92CB1
421 : A9B12C
422 : A9B1C2
423 : A9B21C
424 : A9B2C1
425 : A9BC12
426 : A9BC21
427 : A9C12B
428 : A9C1B2
429 : A9C21B
430 : A9C2B1
431 : A9CB12
432 : A9CB21
433 : AB129C
434 : AB12C9
435 : AB192C
436 : AB19C2
437 : AB1C29
438 : AB1C92
439 : AB219C
440 : AB21C9
441 : AB291C
442 : AB29C1
443 : AB2C19
444 : AB2C91
445 : AB912C
446 : AB91C2
447 : AB921C
448 : AB92C1
449 : AB9C12
450 : AB9C21
451 : ABC129
452 : ABC192
453 : ABC219
454 : ABC291
455 : ABC912
456 : ABC921
457 : AC129B
458 : AC12B9
459 : AC192B
460 : AC19B2
461 : AC1B29
462 : AC1B92
463 : AC219B
464 : AC21B9
465 : AC291B
466 : AC29B1
467 : AC2B19
468 : AC2B91
469 : AC912B
470 : AC91B2
471 : AC921B
472 : AC92B1
473 : AC9B12
474 : AC9B21
475 : ACB129
476 : ACB192
477 : ACB219
478 : ACB291
479 : ACB912
480 : ACB921
481 : B129AC
482 : B129CA
483 : B12A9C
484 : B12AC9
485 : B12C9A
486 : B12CA9
487 : B192AC
488 : B192CA
489 : B19A2C
490 : B19AC2
491 : B19C2A
492 : B19CA2
493 : B1A29C
494 : B1A2C9
495 : B1A92C
496 : B1A9C2
497 : B1AC29
498 : B1AC92
499 : B1C29A
500 : B1C2A9
501 : B1C92A
502 : B1C9A2
503 : B1CA29
504 : B1CA92
505 : B219AC
506 : B219CA
507 : B21A9C
508 : B21AC9
509 : B21C9A
510 : B21CA9
511 : B291AC
512 : B291CA
513 : B29A1C
514 : B29AC1
515 : B29C1A
516 : B29CA1
517 : B2A19C
518 : B2A1C9
519 : B2A91C
520 : B2A9C1
521 : B2AC19
522 : B2AC91
523 : B2C19A
524 : B2C1A9
525 : B2C91A
526 : B2C9A1
527 : B2CA19
528 : B2CA91
529 : B912AC
530 : B912CA
531 : B91A2C
532 : B91AC2
533 : B91C2A
534 : B91CA2
535 : B921AC
536 : B921CA
537 : B92A1C
538 : B92AC1
539 : B92C1A
540 : B92CA1
541 : B9A12C
542 : B9A1C2
543 : B9A21C
544 : B9A2C1
545 : B9AC12
546 : B9AC21
547 : B9C12A
548 : B9C1A2
549 : B9C21A
550 : B9C2A1
551 : B9CA12
552 : B9CA21
553 : BA129C
554 : BA12C9
555 : BA192C
556 : BA19C2
557 : BA1C29
558 : BA1C92
559 : BA219C
560 : BA21C9
561 : BA291C
562 : BA29C1
563 : BA2C19
564 : BA2C91
565 : BA912C
566 : BA91C2
567 : BA921C
568 : BA92C1
569 : BA9C12
570 : BA9C21
571 : BAC129
572 : BAC192
573 : BAC219
574 : BAC291
575 : BAC912
576 : BAC921
577 : BC129A
578 : BC12A9
579 : BC192A
580 : BC19A2
581 : BC1A29
582 : BC1A92
583 : BC219A
584 : BC21A9
585 : BC291A
586 : BC29A1
587 : BC2A19
588 : BC2A91
589 : BC912A
590 : BC91A2
591 : BC921A
592 : BC92A1
593 : BC9A12
594 : BC9A21
595 : BCA129
596 : BCA192
597 : BCA219
598 : BCA291
599 : BCA912
600 : BCA921
601 : C129AB
602 : C129BA
603 : C12A9B
604 : C12AB9
605 : C12B9A
606 : C12BA9
607 : C192AB
608 : C192BA
609 : C19A2B
610 : C19AB2
611 : C19B2A
612 : C19BA2
613 : C1A29B
614 : C1A2B9
615 : C1A92B
616 : C1A9B2
617 : C1AB29
618 : C1AB92
619 : C1B29A
620 : C1B2A9
621 : C1B92A
622 : C1B9A2
623 : C1BA29
624 : C1BA92
625 : C219AB
626 : C219BA
627 : C21A9B
628 : C21AB9
629 : C21B9A
630 : C21BA9
631 : C291AB
632 : C291BA
633 : C29A1B
634 : C29AB1
635 : C29B1A
636 : C29BA1
637 : C2A19B
638 : C2A1B9
639 : C2A91B
640 : C2A9B1
641 : C2AB19
642 : C2AB91
643 : C2B19A
644 : C2B1A9
645 : C2B91A
646 : C2B9A1
647 : C2BA19
648 : C2BA91
649 : C912AB
650 : C912BA
651 : C91A2B
652 : C91AB2
653 : C91B2A
654 : C91BA2
655 : C921AB
656 : C921BA
657 : C92A1B
658 : C92AB1
659 : C92B1A
660 : C92BA1
661 : C9A12B
662 : C9A1B2
663 : C9A21B
664 : C9A2B1
665 : C9AB12
666 : C9AB21
667 : C9B12A
668 : C9B1A2
669 : C9B21A
670 : C9B2A1
671 : C9BA12
672 : C9BA21
673 : CA129B
674 : CA12B9
675 : CA192B
676 : CA19B2
677 : CA1B29
678 : CA1B92
679 : CA219B
680 : CA21B9
681 : CA291B
682 : CA29B1
683 : CA2B19
684 : CA2B91
685 : CA912B
686 : CA91B2
687 : CA921B
688 : CA92B1
689 : CA9B12
690 : CA9B21
691 : CAB129
692 : CAB192
693 : CAB219
694 : CAB291
695 : CAB912
696 : CAB921
697 : CB129A
698 : CB12A9
699 : CB192A
700 : CB19A2
701 : CB1A29
702 : CB1A92
703 : CB219A
704 : CB21A9
705 : CB291A
706 : CB29A1
707 : CB2A19
708 : CB2A91
709 : CB912A
710 : CB91A2
711 : CB921A
712 : CB92A1
713 : CB9A12
714 : CB9A21
715 : CBA129
716 : CBA192
717 : CBA219
718 : CBA291
719 : CBA912
720 : CBA921