通過for迴圈,實現排序
每次迴圈,找到乙個當前的最大值
多次迴圈,完成排序
原理:
相鄰的兩個單位,比較儲存的資料
如果第乙個單元的資料較大,就將兩個相鄰單元,交換儲存資料
過程:
從起始單元開始比較,第一次迴圈,會選擇出乙個最大值,放在陣列所有單元的最後
之後,每次迴圈,都會比較出乙個本次迴圈的最大值,放在當前參與比較單元的最後
之前已經比較選出的單元,不會參與下一次比較
優化:
1,內層迴圈優化1 : 內層迴圈次數-1
當前位和下一位比較 i 和 i+1 比較
當前迴圈的倒數第二位,已經和最後一位進行比較
當前迴圈的最後一位,只需要通過倒數第二位,參與比較
不用參與迴圈
2,外層迴圈優化 :
如果有n個單元參加排序,只需要迴圈排序n-1次
最後一次迴圈排序,會將最後兩個數值的大小排序確定
剩下最後乙個單元,沒有迴圈排序,但是大小已經確定,不需要再次迴圈排序
3,內層迴圈優化2 :
上一次參與迴圈,已經決定出來的最大數值,不用參與下一次迴圈
第一次排序,少0個單元參與
第二次排序,少1個單元參與
第三次排序,少2個單元參與
…通過外層迴圈變數,定義是從 0 開始的迴圈數值
每次內層迴圈,次數,再減去 外層迴圈變數 的數值
核心:
交換儲存的資料
兩個相鄰的單元,比較資料大小,第乙個單元數值較大,就交換兩個單元儲存的資料
var arr =[9
,4,5
,7,1
,8,3
,6,2
]for
(var outer =
0; outer <=
(arr.length -1)
-1; outer ++)}
}console.
log(arr)
;
先定義迴圈的起始位置預設為最小值所在位置
從起始位置下乙個位置開始,執行迴圈
如果有位置上的數值,小於,儲存索引位置上的數值
就儲存這個位置的索引值
迴圈結束,比較儲存的索引,是否是起始位置索引
如果不是,就交換兩個位置上的數值
會將本次迴圈的最小值,放置在迴圈的起始位置上
再執行多次迴圈,完成排序
原理:
從起始位置開始,找最小的數值所在的索引下標
如果最終儲存的索引下標,不是起始位置,就與起始位置交換儲存資料
執行一次迴圈,會將最小值儲存在起始位置上
下一次迴圈,之前的起始位置,不再參與迴圈
核心 :
找到最小值的索引,與起始位置交換數值
先找索引
在交換數值
優化:
外層優化:之前比較出的數值,不參與下一次的比較
內層優化:從起始位置的下乙個位置開始迴圈
var arr =[4
,8,3
,2,6
,9,7
,5,1
];for(
var outer =
0; outer <= arr.length -1-
1;outer ++)}
if(middle != outer)
} console.
log(arr)
;
排序演算法之氣泡排序和選擇排序
個人感覺氣泡排序和選擇排序相似,都是通過兩個for迴圈,兩兩比較實現排序過程。但比較的不同之處在於,若有n個數,氣泡排序進行n 1趟比較,第一趟進行n 1次比較,第i趟進行n i次比較,並且是連續相鄰的兩個數比較,第乙個和第二個數比,再第二個和第三個數比 而選擇排序是將n個數中第乙個數與剩下所有數比...
排序演算法之氣泡排序 選擇排序
排序演算法有很多,包括插入排序,氣泡排序,堆排序,歸併排序,選擇排序,計數排序,基數排序,桶排序,快速排序等。插入排序,堆排序,選擇排序,歸併排序和快速排序,氣泡排序都是比較排序,它們通過對陣列中的元素進行比較來實現排序 其他排序演算法則是利用非比較的其他方法來獲得有關輸入陣列的排序資訊 氣泡排序 ...
排序之氣泡排序和選擇排序
排序的概念與分類 首先我們必須得了解何為排序,使得序列按照乙個關鍵字的有序的排列,這樣的操作就稱為排序。排序用到的解結構與函式 define maxsize 排序數值長度的最大值 typedef struct sqlist 儲存要排序的陣列,r 0 作為乙個臨時變數,length 記錄順序表的長度 ...