演算法--陣列氣泡排序和選擇排序原理分析
1.氣泡排序原理分析
1.1氣泡排序
從前往後後依次比較相鄰兩個元素大小,大的元素往後挪,比較完第一遍後,最大的元素排到了陣列的最後一位(假設是從小到大排序)
1.2原理分析:
氣泡排序邏輯:若為從小到大排序
- 第一個數與第二個數比較 - - 若第二個數大,則不交換位置,反之,交換位置
- 根據上一步的結果:進行第二個數與第三個數比較 - - 若第三個數大,則不交換位置,反之,交換位置
- 依次類推,完成與最後一個數的比較後,最大的數就被排到了末位。
- 接著再排依照同樣的方法,將第二大的數排在倒數第二位(注意:排好了的數,就不需要再與他們比較大小了)
圖解原理
1.3程式碼實現
package 陣列兩種排序;
import java.util.Arrays;
//氣泡排序
public class Test1 {
public static void main(String[] args) {
int[] arr={2,5,1,9,12,6,7};
bubbleSort(arr);
System.out.println("從小到大排序"+Arrays.toString(arr));
bubbleSort2(arr);
System.out.println("從大到小排序"+Arrays.toString(arr));
}
//1.氣泡排序--從小到大排序
public static int[] bubbleSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
//對於已經排好的元素就不用再做比較了,所以第二個for迴圈,值遍歷到arr.length-i-1
for (int j = 0; j < arr.length-i-1; j++) {
//相鄰兩數比較,前面的數大,則交換,否則不交換,這樣迴圈完後,最大值被排到了最後一位
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
//2.氣泡排序--從大到小排序 只是將if判斷中大於號>,改為了小於號<
public static int[] bubbleSort2(int[] arr){
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+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
}
2.選擇排序原理分析
2.1選擇排序:
在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止(假設為從小到大排序)
2.2原理分析
選擇排序邏輯:若為從小到大排序
- 第一次:對陣列中所有數值進行比較,獲得最小值下標,然後將最小值與第一個數交換
- 第二次:對陣列中剩餘(除第一個數)數值進行比較,獲得最小值下標,然後將最小值與第二個數交換
- 依次類推,直至確定倒數第二個位置的數值
圖解原理
2.3程式碼實現
package 陣列兩種排序;
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[] arr = { 2, 5, 1, 9, 12, 6, 7 };
chooseSort(arr);
System.out.println("從小到大排序" + Arrays.toString(arr));
chooseSort2(arr);
System.out.println("從大到小排序" + Arrays.toString(arr));
}
// 1.選擇排序--從小到大排序
public static int[] chooseSort(int[] arr) {
//遍歷陣列,獲取指定的arr[i]去與
for (int i = 0; i < arr.length - 1; i++) {
int index = i;//儲存最小值的下標
for (int j = i + 1; j < arr.length; j++) {
//若arr[index]大,則改變索引,使arr[index]變為那個小的值,最後可以得到最小值的索引
if (arr[index] > arr[j]) {
index = j;
}
}
//若index和初始值i相同就沒必要交換了
if(index!=i){
//將最小值與arr[i]交換
int temp2 = arr[i];
arr[i] = arr[index];
arr[index] = temp2;
}
}
return arr;
}
// 2.選擇排序--從大到小排序 只是將if判斷中大於號>,改為了小於號<
public static int[] chooseSort2(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int index = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[index] < arr[j]) {
index = j;
}
}
if(index!=i){
//將最小值與arr[i]交換
int temp2 = arr[i];
arr[i] = arr[index];
arr[index] = temp2;
}
}
return arr;
}
}
3.兩種排序方式的比較
3.1氣泡排序
交換次數多,耗時耗資源
3.2選擇排序
交換次數少,節省時間和資源
相關文章
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序和選擇排序排序
- 氣泡排序和選擇排序詳解排序
- 氣泡排序和選擇排序流程圖排序流程圖
- #排序演算法#【1】概述、氣泡排序、選擇排序排序演算法
- 氣泡排序與選擇排序排序
- 陣列氣泡排序陣列排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 演算法(三)初等排序後篇[選擇和氣泡排序]演算法排序
- 八大排序演算法(1)_氣泡排序和選擇排序排序演算法
- (一)氣泡排序、選擇排序、插入排序排序
- 關於js陣列的六種演算法---水桶排序,氣泡排序,選擇排序,快速排序,插入排序,希爾排序的理解。JS陣列演算法排序
- JAVA小練習氣泡排序,選擇排序和插入排序Java排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法
- 陣列與指標&氣泡排序陣列指標排序
- 排序演算法–氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法--氣泡排序排序演算法
- 排序演算法-氣泡排序排序演算法
- 排序演算法——氣泡排序排序演算法
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 氣泡排序與選擇排序超詳細講解排序
- 陣列選擇排序陣列排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 【小小前端】前端排序演算法第一期(氣泡排序、選擇排序、插入排序)前端排序演算法
- 選擇和氣泡排序核心程式碼及流程圖排序流程圖
- 排序——氣泡排序排序
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 氣泡排序演算法排序演算法
- 演算法:氣泡排序演算法排序
- Java排序演算法之氣泡排序Java排序演算法
- 【演算法-排序之一】氣泡排序演算法排序
- 排序演算法-氣泡排序(Bubble Sort)排序演算法
- 排序:氣泡排序&快速排序排序
- 排序之氣泡排序排序