java 算法基礎之二快速排序算法


所謂的快速排序的思想就是,首先把數組的第一個數拿出來做為一個key,在前后分別設置一個i,j做為標識,然后拿這個key對這個數組從后面往前遍歷,及j--,直到找到第一個小於這個key的那個數,然后交換這兩個值,交換完成后,我們拿着這個key要從i往后遍歷了,及i++;一直循環到i=j結束,當這里結束后,我們會發現大於這個key的值都會跑到這個key的后面,不是的話就可能你寫錯了,小於這個key的就會跑到這個值的前面;然后我們對這個分段的數組再時行遞歸調用就可以完成整個數組的排序。

用圖形法表示由下:

這樣就以key分為了兩個段,我們把這兩個段再遞進去就可以解決問題了

實現代碼由下:

 1 package com.quick;
 2 
 3 public class quick {
 4     public void quick_sort(int[] arrays, int lenght) {
 5         if (null == arrays || lenght < 1) {
 6             System.out.println("input error!");
 7             return;
 8         }
 9         _quick_sort(arrays, 0, lenght - 1);
10     }
11 
12     public void _quick_sort(int[] arrays, int start, int end) {
13         if(start>=end){
14             return;
15         }
16         
17         int i = start;
18         int j = end;
19         int value = arrays[i];
20         boolean flag = true;
21         while (i != j) {
22             if (flag) {
23                 if (value > arrays[j]) {
24                     swap(arrays, i, j);
25                     flag=false;
26 
27                 } else {
28                     j--;
29                 }
30             }else{
31                 if(value<arrays[i]){
32                     swap(arrays, i, j);
33                     flag=true;
34                 }else{
35                     i++;
36                 }
37             }
38         }
39         snp(arrays);
40         _quick_sort(arrays, start, j-1);
41         _quick_sort(arrays, i+1, end);
42         
43     }
44 
45     public void snp(int[] arrays) {
46         for (int i = 0; i < arrays.length; i++) {
47             System.out.print(arrays[i] + " ");
48         }
49         System.out.println();
50     }
51 
52     private void swap(int[] arrays, int i, int j) {
53         int temp;
54         temp = arrays[i];
55         arrays[i] = arrays[j];
56         arrays[j] = temp;
57     }
58 
59     public static void main(String args[]) {
60         quick q = new quick();
61         int[] a = { 49, 38, 65,12,45,5 };
62         q.quick_sort(a,6);
63     } 
64 
65 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM