關於數組內排序計算次數的問題
不廢話,直接上代碼。
1.獲取5個數中的最大數:
int[] score = {66,77,88,65,88};
int max = score[0];
for(int i=0;i<score.length-1;i++){
if(max<score[i+1]){
max = score[i+1];
}
}
由此可以看出,計算的總次數為
計算個數 2 3 4 5 ... n
計算次數 1 2 3 4 ... n-1
最小數次數一樣。
2.將6個數從小到大排列:(冒泡)
int[] a = { 55, 45, 23, 444, 313, 112 };
int c;
int count = 0;
for (int i = 1; i < a.length ; i++) {
for (int j = 0; j < a.length-i; j++) {
if (a[j] > a[j + 1]) {
c = a[j + 1];
a[j + 1] = a[j];
a[j] = c;
}
count++;
}
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i] + "==" + count+"==="+a.length);
}
輸出:
---------------------
23==15===6
45==15===6
55==15===6
112==15===6
313==15===6
444==15===6
---------------------
冒泡分析:
c = a[j + 1];
a[j + 1] = a[j];
a[j] = c;
變量C存在的意義就是存放a[j+1]並且在替換之後放入a[j]。
(隨手畫圖不要見怪)
冒泡的交換次數依次為,(5,4,3,2,1)
每次完成內部for循環的目的是把最大的數放在最後,並在下次循環的時候去除,所以次數依次減一。
關於數組內排序計算次數的問題