亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

java (冒泡、選擇、插入)排序

系統 2337 0

?

?1、冒泡排序 Bubble Sort

?

? ? ? ? 最簡單的排序方法是冒泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對這個“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰的元素的順序是否正確。 如果發現兩個相鄰元素的順序不對,即“輕”的元素在下面,就交換它們的位置 。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置;處理二遍之后,“次輕”的元素就浮到了次高位置。在作第二遍處理時,由于最高位置上的元素已是“最輕”元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。這個算法可實現如下。

?

?

2、選擇排序 Selection Sort

?

? ? ? ? 選擇排序的基本思想是:對待排序的記錄序列進行n-1遍的處理,第1遍處理是將L[1..n]中最小者與L[1]交換位置,第2遍處理是將L[2..n]中最小者與L[2]交換位置,......,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經過i遍處理之后,前i個記錄的位置就已經按從小到大的順序排列好了。

  當然,實際操作時,也可以根據需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。

?

備注:個人理解冒泡排序是每次和相鄰的數據比較之后(如果符合條件)就進行交換;

而選擇排序是每次選擇最小的,確定之后再做交換,然后依次放在數組的最前或者最后面

?

?

3 、插入排序 Insertion Sort
插入排序的基本思想是,經過i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當位置,使得L[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較L[i]和L[i-1],如果L[i-1]≤ L[i]騆[1..i]已排好序,第i遍處理就結束了;否則交換L[i]與L[i-1]的位置,繼續比較L[i-1]和L[i-2],直到找到某一個位置j(1≤j≤i-1),使得L[j] ≤L[j+1]時為止。
簡言之,插入排序就是每一步都將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢 。插入排序方法分直接插入排序和折半插入排序兩種,這里只介紹直接插入排序,折半插入排序留到“查找”內容中進行。
  圖1演示了對4個元素進行直接插入排序的過程,共需要(a),(b),(c)三次插入。

?

?

?

?

      package hb.mm;

import java.util.LinkedList;

public class SortDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arr = { 5, 6, 2, 7, 1, 3, 53, 8 };

		// int[] result = doBubbleSort(arr);
		// int[] result = doChooseSort(arr);
		//int[] result = doInsertSort_for(arr);
		int[] result = doInsertSort_while(arr);
		
		new LinkedList();

		printArr(result);
	}

	/**
	 * 循環數組
	 * @param arr 需要便利的數組
	 */
	public static void printArr(int[] arr) {
		for (int a : arr) {
			System.out.println(a);
		}
	}

	/**
	 * 插入排序 使用while循環  
	 * @param arr
	 * @return
	 */
	public static int[] doInsertSort_while(int[] arr){
		int length = arr.length;
		//從第一個數組開始,與第零個比較
		for(int i=1;i<length;i++){
			int temp = arr[i];
			int j=i;
			//將需要插入的數據與最大的比較,然后逐步向小的方向移動
			while(arr[j-1]>temp){
				arr[j]=arr[j-1];
				j--;
				if(j<=0){
					break;
				}
			}
			arr[j] = temp;
		}
		return arr;
	}
	
	/**
	 * 插入排序 使用for循環
	 * @param arr
	 * @return
	 */
	public static int[] doInsertSort_for(int[] arr) {
		int length = arr.length;
		for (int i = 1; i < length; i++) {
			int temp = arr[i];
			int j;
			for (j = i; j > 0; j--) {
				if (arr[j - 1] > temp) {
					arr[j] = arr[j - 1];
				} else {
					// 如果當前的數,不小前面的數,那就說明不小于前面所有的數,
					// 因為前面已經是排好了序的,所以直接通出當前一輪的比較
					break;
				}
			}
			arr[j] = temp;
		}

		return arr;
	}

	/**
	 * 選擇排序
	 * @param arr
	 * @return
	 */
	public static int[] doChooseSort(int[] arr) {
		int length = arr.length;
		int temp;
		for (int i = 0; i < length; i++) {
			temp = arr[i];
			int j;
			int smallestLocation = i;// 最小數的下標
			for (j = i + 1; j < length; j++) {
				if (temp > arr[j]) {
					temp = arr[j];// 取出最小值
					smallestLocation = j;// 取出最小值所在的下標
				}
			}
			//選出了最小的數據,然后放在smallestLocation的位置,循環之后只是最后交換一次
			arr[smallestLocation] = arr[i];
			arr[i] = temp;
		}
		return arr;
	}

	/**
	 * 冒泡排序
	 * @param arr
	 * @return
	 */
	public static int[] doBubbleSort(int[] arr) {
		int length = arr.length;
		for (int i = 0; i < length; i++) {

			for (int j = i + 1; j < length; j++) {
				int temp;
				//比較相鄰的下一個數據,如果相等則交換(交換多次,與選擇排序不一樣)
				if (arr[i] > arr[j]) {
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}

		}
		return arr;
	}

}

    

?

備注:對于static修飾的方法而言,則可以使用類來直接調用該方法, 如果在static修飾的方法中使用this關鍵字,則這個關鍵字就無法指向合適的對象 。所以static修飾的方法中是不能使用this引用的,由于static修飾的方法不能使用this引用,所以static修飾的方法不能訪問不使用static修飾的普通成員。

因此java語法規定: 靜態成員不能直接訪問非靜態成員

java (冒泡、選擇、插入)排序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎在线观看 | 狠狠色噜噜狠狠狠狠米奇777 | 91成人午夜精品福利院在线观看 | 日本中文一区 | 精品在线免费视频 | 欧美激情 亚洲 | 国产精品久久精品牛牛影视 | 日日夜夜影院 | 久久99精品国产自在现线小黄鸭 | 四虎高清在线精品免费观看 | 久久亚洲精品中文字幕二区 | 国产一国产一级毛片视频在线 | 日本欧美成人 | 草莓视频在线观看精品最新 | 天天操天天操 | 久久久青草青青国产亚洲免观 | 99热这里有免费国产精品 | 婷婷网五月天天综合天天爱 | 91久久福利国产成人精品 | 亚洲成人免费视频 | 日韩成人免费视频 | 国产精品v免费视频 | 欧美久草视频 | 亚洲黄a | 啪啪99久久综合精品色 | 在线观看中文字幕国产 | 全部免费特黄特色大片中国 | 九九久久国产精品免费热6 九九久久精品 | 青草精品视频 | 久久精品国产亚洲片 | 国产精品大片天天看片 | 日本精品久久久一区二区三区 | 精品一区二区三区在线播放 | 成人区精品一区二区不卡亚洲 | 天天射天天干天天舔 | 狠狠色丁香婷婷久久综合2021 | 国产日韩一区 | 国产精品一久久香蕉产线看 | 国内精品视频一区二区八戒 | 欧美在线一区二区三区精品 | 在线亚洲精品国产成人二区 |