摘要:插入排序特殊從第二個(gè)元素開始,和第一個(gè)元素比較,如果滿足排序的順序,則交換順序。優(yōu)化后選擇排序從第一個(gè)位置開始遍歷待排序的元素,找到最小值和第一元素交換從位置開始往后遍歷,找到之后元素中的最小值,和第個(gè)元素交換位置。
插入排序
1、特殊:從第二個(gè)元素開始,和第一個(gè)元素比較,如果滿足排序的順序,則交換順序。
2、一般:把待比較和他之前的所有元素相比(從右往左),如果滿足排序的順序,這交換。
private static void insertSort(int[] arr){ for (int i = 1; i < arr.length; i++){ //從第二個(gè)元素開始 for (int j = i; j > 0; j--){ //這個(gè)元素和之前的元素比較 if (arr[j] < arr[j-1]){ int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } }
2、冒泡排序
1、從第一個(gè)元素開始,和第二個(gè)元素相比,如果滿足排序條件,則交換
2、把未排序的元素和后面的元素依次比較,如果滿足排序條件,則交換
最初
private static void bubbleSort(int[] arr){ for (int i = 0; i < arr.length-1; i++){ for (int j = 0; j < arr.length - 1; j++){ if (arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
因?yàn)槊看窝h(huán)后,i前面的元素已經(jīng)排好序。所以可以進(jìn)行優(yōu)化。
優(yōu)化后:
private static void bubbleSort(int[] arr){ for (int i = 0; i < arr.length-1; i++){ for (int j = i+1; j < arr.length - 1; j++){ if (arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
3、選擇排序
1、從第一個(gè)位置開始遍歷待排序的元素,找到最小值和第一元素交換
2、從位置i開始往后遍歷,找到i之后元素中的最小值,和第i個(gè)元素交換位置。
private static void selectSort(int[] arr){ int minLoc,temp; for (int i = 0; i < arr.length-1; i++){ minLoc = i; for (int j = i+1; j < arr.length; j++){ if (arr[j] < arr[minLoc]){ minLoc = j; } } temp = arr[i]; arr[i] = arr[minLoc];; arr[minLoc] = temp; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76338.html
摘要:前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(gè)歸總。直到無序區(qū)中的數(shù)為零,結(jié)束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結(jié)束。堆排序思想堆排序是采用樹的形式的數(shù)據(jù)結(jié)構(gòu)來進(jìn)行排序的,其中每一個(gè)堆都是完全二叉樹。 前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(gè)歸總。 排序方法 平均復(fù)雜度 最壞復(fù)雜度 最好復(fù)雜度 輔助空間 穩(wěn)定性 直接選擇排序 O(n^2...
摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實(shí)現(xiàn)思路有點(diǎn)類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
閱讀 3467·2023-04-25 23:25
閱讀 2110·2021-11-12 10:36
閱讀 2825·2019-08-30 12:47
閱讀 2049·2019-08-29 18:45
閱讀 447·2019-08-29 17:28
閱讀 1792·2019-08-29 17:15
閱讀 1717·2019-08-29 16:05
閱讀 1419·2019-08-29 14:17