冒泡排序、插入排序、選擇排序、快速排序代碼實現

冒泡排序

原理:冒泡排序,就是如同一個一個氣泡一樣有規律的冒出。在數組的排序實現,就是其中的最值一個個冒出到最後。

//冒泡排序
	public static void bulle(int[] array) {
		
		//冒出最值的次數(array.length-1 最後一個不需要冒泡 自然有序)
		for(int i=0;i<array.length-1;i++) {
			
			//冒泡排序核心:一個一個比較,冒出一個最值
			//array.length-1-i  array.length-1保證數組不會出現越界異常,
                      //每次冒泡後,排序好的不用冒泡比較所以每執行i次就有i次不需要排序
			for(int j=0;j<array.length-1-i;j++) {
				
				//冒出最大值
				if(array[j]>array[j+1]) {
					//交換
					int temp=array[j];
					array[j]=array[j+1];
					array[j+1]=temp;
				}
			}
		}
	}

注意:在交換時 int temp變量應該寫在循環外,不然每次交換多會生成一個temp變量浪費了空間。這裏寫在裏邊時爲了更好的理解程序。 


插入排序 

原理:先取出一個數,接着再取出一個數和之前的的數,放在前或後面排序好,接着就是一個個去數插入已經排序好的數組中。

 

//插入排序
	public static void insertSort(int[] arr) {
		
		for(int i=0;i<arr.length;i++) {//從頭一個個取出數arr[i]	
			
			for(int j=0;j<i;j++) {//和排序好的比較  數組下標從0到(i-1)已經排序好
				if(arr[i]<arr[j]) {
					int temp=arr[j];
					arr[j]=arr[i];
					arr[i]=temp;
				}
			}
		}
	}

 


選擇排序

原理:找到數組最值的下標,通過下標實現把數放在指定位置(這裏是把最值放在開頭)。接着在剩餘元素裏邊繼續找最值,放到數組指定位置。

	//選擇排序
	public static void selectSort(int[] arr) {
                //查找最值次數
		for(int j=0;j<arr.length;j++) {

			int key=j;//默認最值下標爲剩餘數組第一個
			for(int i=j;i<arr.length;i++) {
				
                        //找到最值
				if(arr[i]<arr[key]) {
					key=i;//剩餘元素最值下標
				}
			}
                    //把最值放在數組前j的位置
			int temp=arr[j];
			arr[j]=arr[key];
			arr[key]=temp;
		}
	}

快速排序

原理:第一次從數組中挑出一個數(一般用第一個數),通個比較把小於和大於它的數有規律放在它的兩側,一側爲大於它的一側爲小於它的,不需要在意左右兩側的順序只需用挑出的數進行分開就行。接着對左、右兩測分別進行之前的操作,取出一個數,然後小於和大於它的數分類。如此重複直到不能分爲止數組就實現了排序。

這是轉載的快速排序視頻鏈接:快速排序視頻

	//快速排序
	public static void quickSort(int[] arr, int left,int right){
		if(left>=right) {
			return;
		}
		int temp=arr[left];
		int i=left;
		int j=right;
		while(i!=j) {
			//找到左右兩數
			while(arr[j]>=temp&&i<j) {
				j--;
			}
			while(arr[i]<=temp&&i<j) {
				i++;
			}
			//交換
			int t=arr[j];
			arr[j]=arr[i];
			arr[i]=t;
		}
		//跳出循環  中間數和基數交換
		arr[left]=arr[i];
		arr[i]=temp;
		
		//遞歸排完所有
		quickSort(arr,left,i-1);
		quickSort(arr,i+1,right);
    }

 


轉載一下在別的地方看到的寫的很好很詳細的排序文章:十大經典排序算法

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