中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中簡單的排序算法示例

發布時間:2020-11-10 13:56:38 來源:億速云 閱讀:171 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關java中簡單的排序算法示例的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

算法也是一個爭論了很久的話題,程序員到底該不該掌握算法?不同的人有不同的答案,而事實上,很多公司都對算法有一定的要求,有些公司直接在面試的時候便會要求面試者手寫算法題。這就對程序員的技術要求產生了很大的考驗,所以面對如今的大環境,我們必須掌握算法,才能在今后的工作中占據一席之地。

那么接下來,我就簡單介紹一下幾個排序算法,希望對你們有所幫助。

冒泡排序

冒泡排序(Bubble Sort),是一種較簡單的排序算法。

它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重復地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。

演示:

java中簡單的排序算法示例

代碼如下:

@Test
public void bubbleSort() {
	int[] arr = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
	// 統計比較次數
	int count = 0;
	// 第一輪比較
	for (int i = 0; i < arr.length - 1; i++) {
		boolean flag = true;
		// 第二輪比較
		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;
			}
			count++;
		}
	}
	System.out.println(Arrays.toString(arr));
	System.out.println("一共比較了:" + count + "次");
}

運行結果:

[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
一共比較了:105次

選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是:第一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然后再從剩余的未排序元素中尋找到最小(大)元素,然后放到已排序的序列的末尾。以此類推,直到全部待排序的數據元素的個數為零。選擇排序是不穩定的排序方法。

演示:

java中簡單的排序算法示例

代碼如下:

@Test
public void SelectionSort() {
	int[] arr = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
	for (int i = 0; i < arr.length - 1; i++) {
		int index = i;
		for (int j = 1 + i; j < arr.length; j++) {
			if (arr[j] < arr[index]) {
				index = j;// 保存最小元素的下標
			}
		}
		// 此時已經找到最小元素的下標
		// 將最小元素與前面的元素交換
		int temp = arr[index];
		arr[index] = arr[i];
		arr[i] = temp;
	}
	System.out.println(Arrays.toString(arr));
}

運行結果:

[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

實現也非常的簡單,首先在外循環里定義了一個index變量存儲i的值,這是為了避免重復地比較,因為在每一輪的比較結束后,前i個元素是已經排好序的,所以無需再次比較,只需從i開始即可。后面的比較都是基于index位置的元素進行比較,倘若比較完后index位置的元素是最小值,那就無需交換,不動即可。而如果找到了比index位置的元素更小的元素,那就將該元素的索引賦值給index,然后繼續比較,直到比較完成,比較完成之后得到的index即為數組中的最小值,那此時只需要將index位置的元素和i位置的元素交換即可。

插入排序

插入排序(Insertion sort)是一種簡單直觀且穩定的排序算法。如果有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入后此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,算法適用于少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最后一個元素除外(讓數組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成后,再將這個最后元素插入到已排好序的第一部分中。

插入排序的基本思想是:每步將一個待排序的記錄,按其關鍵碼值的大小插入到前面已經排序的數組中的適當位置上,直到全部插入完為止。

演示:

java中簡單的排序算法示例

代碼如下:

@Test
public void InsertionSort() {
	int[] arr = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
	for (int i = 1; i < arr.length; i++) {
		// 定義待插入的數
		int insertValue = arr[i];
		// 找到待插入數的前一個數的下標
		int insertIndex = i - 1;
		while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
			arr[insertIndex + 1] = arr[insertIndex];
			insertIndex--;
		}
		arr[insertIndex + 1] = insertValue;
	}
	System.out.println(Arrays.toString(arr));
}

運行結果:

[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

那么在這里,因為數組元素我們并不確定,所以只能將數組的第一個元素看成是一個有序的序列,所以從數組的第二個元素開始才是我們需要去尋找插入位置的元素。所以外層循環從1開始,然后將arr[i],也就是當前的第二個元素先保存起來,然后找到待插入元素的前一個元素下標,也就是i-1,此時通過一個while循環去比較。

當insertIndex小于0時應該退出循環,因為此時已經與前面的所有元素比較完畢。在比較的過程中,如果待插入元素小于前一個元素,就將前一個元素后移,也就是將前一個元素的值直接賦值給待插入元素位置。因為在最開始已經將待插入元素進行了保存,所以只需將待插入元素的值賦值給它的前一個元素即可。因為在while循環中insertIndex執行了自減操作,所以它的前一個元素下標應為insertIndex + 1。而如果待插入的元素值大于前一個元素,那么就不會進入while循環,這樣insertIndex + 1之后的位置仍然是自己所在的位置,所以賦值后值不改變,后面的操作以此類推。

感謝各位的閱讀!關于java中簡單的排序算法示例就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金秀| 屯留县| 五莲县| 沽源县| 浮山县| 宜城市| 汶上县| 黑龙江省| 慈利县| 五莲县| 闽侯县| 邯郸县| 遂溪县| 杨浦区| 靖宇县| 绥德县| 焦作市| 海晏县| 满洲里市| 徐闻县| 石屏县| 寿阳县| 潢川县| 安西县| 西充县| 乐陵市| 隆安县| 井研县| 麻江县| 五家渠市| 丰台区| 泉州市| 临沭县| 县级市| 濮阳市| 泰来县| 个旧市| 淮南市| 陇川县| 霞浦县| 甘泉县|