1. 程式人生 > >常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序

常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序

快速排序

public class QuickSort {
	public void qSort(int[] arr,int left,int right) {
		if(left>right) {
			return ;
		}
		int i = left;
		int j = right;
		int temp = arr[left];
		while(i<j) {
			//從右向左遍歷
			while(arr[j]>=temp&&i<j) {
				j--;
			}
			//從左向右遍歷
			while(arr[i]<=temp&&i<j) {
				i++;
			}
			if(i<j) {
				int k = arr[i];
				arr[i] = arr[j];
				arr[j] = k;
			}
		}
		if(arr[i]<temp) {
			arr[left] = arr[i];
			arr[i] = temp;
		}
		//System.out.println(Arrays.toString(arr));  //輸出每次排序結果
		qSort(arr, left, j-1);
		qSort(arr, j+1, right);
		
	}
	public static void main(String[] args) {
		 int[] arr = {5,8,12,9,7,36,24};
		 QuickSort qs = new QuickSort();
		 qs.qSort(arr, 0, arr.length-1);
	}
}

輸出結果

[5, 7, 8, 9, 12, 24, 36]

改進思路:可以在方法執行前加個判斷,判斷陣列是否已經有序,可以減少排序次數(可自己嘗試實現)

氣泡排序

public class BubbleSort {
	//氣泡排序,排序後結果從小到大
	public void bubbleSort(int arr[]) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j=0;j<arr.length-1-i;j++) {
				if(arr[j]>arr[j+1]) {
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
	public static void main(String[] args) {
		int[] arr = {5,8,12,9,7,36,24};
		BubbleSort bs = new BubbleSort();
		bs.bubbleSort(arr);
		System.out.println(Arrays.toString(arr));
	}
}

輸出結果

[5, 7, 8, 9, 12, 24, 36]

改進思路:如果這次氣泡排序後與上次冒泡結果一樣,則判斷陣列已經有序,不用再執行冒泡(自己嘗試實現)

選擇排序

/* 簡單選擇排序的基本思想:給定陣列:int[] arr={裡面n個數據};
 * 第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料,
 * 將它與arrr[1]交換;第2趟,在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換;
 * 以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料,將它與r[i]交換,直到全部排序完成。
 */
public class SelectSort {
	public void selectSort(int[] arr) {
		for(int i=0;i<arr.length-1;i++) {
			int k=i;
			for(int j=i;j<arr.length-1;j++) { 
				if(arr[k]> arr[j]) {
					k=j;
				}
			}
			int temp=arr[i];
			arr[i]=arr[k];
			arr[k]=temp;
		}
	}
	public static void main(String[] args) {
		int[] arr = {5,8,12,9,7,36,24};
		SelectSort ss = new SelectSort();
		ss.selectSort(arr);
		System.out.println(Arrays.toString(arr));
	}
}