每天進步一點點之數據結構和算法(2)——冒泡,快速排序

1.冒泡排序介紹

 

冒泡排序(Bubble Sort),又被稱爲氣泡排序或泡沫排序。

它是一種較簡單的排序算法。它會遍歷若干次要排序的數列,每次遍歷時,它都會從前往後依次的比較相鄰兩個數的大小;如果前者比後者大,則交換它們的位置。這樣,一次遍歷之後,最大的元素就在數列的末尾! 採用相同的方法再次遍歷時,第二大的元素就被排列在最大元素之前。重複此操作,直到整個數列都有序爲止!
 

冒泡排序圖文說明

/*
	    *     a -- 待排序的數組
	    *     n -- 數組的長度
	    */
	   public static void bubbleSort(int[] a, int n) {
	       int i,j;
 
	       for (i=n-1; i>0; i--) {
	           // 將a[0...i]中最大的數據放在末尾
	           for (j=0; j<i; j++) {
 
	               if (a[j] > a[j+1]) {
	                   // 交換a[j]和a[j+1]
	                   int tmp = a[j];
	                   a[j] = a[j+1];
	                   a[j+1] = tmp;
	               }
	           }
	       }
	      
	   }

運行:

int[] a = {20,40,30,10,60,50,70};
       String aa = "冒泡排序";
       bubbleSort(a,a.length);
 
 System.out.print(aa);
  for (int d : a) {
   System.out.print(d+",");
}

2.快速排序介紹

快速排序(Quick Sort)使用分治法策略。

它的基本思想是:選擇一個基準數,通過一趟排序將要排序的數據分割成獨立的兩部分;其中一部分的所有數據都比另外一部分的所有數據都要小。然後,再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

快速排序流程:

  1. 從數列中挑出一個基準值。

  2. 將所有比基準值小的擺放在基準前面,所有比基準值大的擺在基準的後面(相同的數可以到任一邊);在這個分區退出之後,該基準就處於數列的中間位置。

  3. 遞歸地把"基準值前面的子數列"和"基準值後面的子數列"進行排序。


圖文介紹

代碼實現:

 /**
	    *
	    * 參數說明:
	    *     a -- 待排序的數組
	    *     l -- 數組的左邊界(例如,從起始位置開始排序,則l=0)
	    *     r -- 數組的右邊界(例如,排序截至到數組末尾,則r=a.length-1)
	    */
	   public static void quickSort(int[] a, int l, int r) {
 
	       if (l < r) {
	           int i,j,x;
 
	           i = l;
	           j = r;
	           x = a[i];
	           while (i < j) {
	               while(i < j && a[j] > x)
	                   j--; // 從右向左找第一個小於x的數
	               if(i < j)
	                   a[i++] = a[j];
	               while(i < j && a[i] < x)
	                   i++; // 從左向右找第一個大於x的數
	               if(i < j)
	                   a[j--] = a[i];
	           }
	           a[i] = x;
	           quickSort(a, l, i-1); /* 遞歸調用 */
	           quickSort(a, i+1, r); /* 遞歸調用 */
	       }
	      
	   }

運行:

 
           String aa = "快速排序";
	       quickSort(a,0,a.length-1);
	       
 
	       
	       System.out.print(aa);
	       for (int d : a) {
	    	   System.out.print(d+",");
		   }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章