排序算法

冒泡排序(BubbleSort)

冒泡排序的時間複雜度爲O(n^2)。

1.比較相鄰的元素,前一個比後一個大(或者前一個比後一個小)調換位置

2.每一對相鄰的元素進行重複的工作,從開始對一直到結尾對,這步完成後,結尾爲最大或最小的數.

3.針對除了最後一個元素重複進行上面的步驟。

4.重複1-3步驟直到完成排序

動畫演示:

實現代碼:

package Array;
//冒泡排序
public class BubbleSort {
	public static void main(String[] args) {
		bubblesort();//調用方法
	}
	public static void bubblesort(){
		int arr[] = {5,3,2,9,1,7,8,6,4};
		//i表示輪數
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j]>arr[j+1]){ //後者大於前者
					int temp = arr[j];
					arr[j] = arr[j+1]; //將arr[j+1]和arr[j]的位置互換
					arr[j+1] = temp;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) { //遍歷排序後的數組
			System.out.print(arr[i]+" ");
		}
	}
}

 

選擇排序(Selection Sort)

以升序爲例,第一趟,將數組中下標爲0的元素和下標爲1的元素進行比較,如果後面的元素比它小,則將下標爲1的元素和下標爲0的元素位置互換,然後再拿下標爲0的元素和下標爲2的元素進行比較.....下標爲0的元素和所有元素排序完畢,再拿下標爲2,3,4,......的元素按照上面流程繼續進行排序。

動畫演示:

實現代碼:

package day05Array;
//選擇排序 以升序排列
public class SelectedSort {
	public static void main(String[] args) {
		selectsort(); //調用方法
	}
	public static void selectsort(){
		int arr[]={5,3,2,9,1,7,8,6,4}; //定義數組
		for (int i = 0; i < arr.length-1; i++) { 
			for(int j =i+1;j<arr.length;j++){
				if(arr[i]>arr[j]){  //後面的元素大於前一個元素
                                        //進行位置互換
					int temp = arr[i]; 
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) { //遍歷排序好的數組
			System.out.print(arr[i]+" ");
		}
	}
}

插入排序(Insertion-Sort)

它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。

  算法描述

 

動畫演示:

 

  • 從第一個元素開始,該元素可以認爲已經被排序;
  • 取出下一個元素,在已經排序的元素序列中從後向前掃描;
  • 如果該元素(已排序)大於新元素,將該元素移到下一位置;
  • 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
  • 將新元素插入到該位置後;
  • 重複步驟2~5。

實現代碼:

package day05Array;
//插入排序
public class InsertSort {
	public static void main(String[] args) {
		insertSort();
	}
	public static void insertSort(){
		int[] arr={5,1,3,2,7,4,9,8,6};
		for(int i=1;i<arr.length;i++){
			int e=arr[i];
			int j=i-1;
			while(j>=0&&arr[j]>e){
				arr[j+1]=arr[j];
				j--;
			}
			arr[j+1]=e;
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
	}
}

 

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