黑馬程序員——Java基礎語法:幾種簡單的排序算法的實現

------- android培訓java培訓、期待與您交流! ----------


        1.快速排序:它通過一趟排序將要排序的元素分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分元素分別進行快速排序,整個排序以遞歸的方式進行,從而最終使所有元素有序。


        2.選擇排序:每一趟從待排序的元素中選出最小的一個元素,順序放在已排好序的數列的一端,直到全部待排序的元素變得有序。


        3.冒泡排序:它通過不斷遍歷要排序的數列,每次比較兩個元素,交換順序錯誤的元素。一直重複遍歷交換直到沒有需要交換的元素爲止。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。

   

package com.itheima;

/**
 * 幾種簡單的排序算法的實現
 * @author Ryan
 */

public class SortUtils {
	/*
	 * 快速排序
	 * */
	public static void quickSort(int[] arr,int low,int high)
	{
		int temp;										//定義一個變量用於存放樞軸
		int left = low,right = high;						
		if (low<high){
			temp = arr[low];
	
	//該循環完成了一趟排序,將大於樞軸的元素放在右邊,而小於樞軸的元素放在左邊
			while(left!=right){
				while(right>left&&arr[right]>temp)		//從右往左尋找一個小於樞軸的元素
					right--;							
				if(left<right){							
					arr[left] = arr[right];					//將這個找到的元素放在樞軸左邊
					left++;
				}
				while(left<right&&arr[left]<temp)			//從左往右尋找一個大於樞軸的元素
					left++;
				if(left<right){
					arr[right] = arr[left];					//將這個找到的元素放在樞軸右邊
					right--;
				}
			}
			arr[left] = temp;							//把樞軸放在正確的位置
			
			quickSort(arr,low,left-1);						//通過遞歸最終排序完成
			quickSort(arr,left+1,high);
		}
	}
	
	/*
	 *選擇排序
	 *內循環就結束一次,最值出現頭角標位置 
	 */
	public static void selectSort(int[] arr)
	{
		for (int x=0; x<arr.length-1; x++)
		{
			for (int y=x+1; y<arr.length; y++)
			{
				if (arr[x]>arr[y])
					swap(arr,x,y);
			}
		}
	}
	
	/*
	 * 冒泡排序:相鄰的兩個元素進行比較,如果符合條件就換位
	 * 			內循環一次,最值出現在尾角標的位置
	 * */
	public static void bubbleSort(int[] arr)
	{
		for (int x=0; x<arr.length-1; x++)
		{
			for (int y=0; y<arr.length-x-1; y++)			//-x是爲了讓每一次比較的元素減少,-1是爲了防止角標越界
			{
				if (arr[y]>arr[y+1])
					swap(arr,y,y+1);
			}
		}
	}
	
	//爲選擇排序和冒泡排序定義一個交換數組中元素的方法
	public static void swap(int[] arr,int a,int b)
	{
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}
}



------- android培訓java培訓、期待與您交流! ----------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章