1. 程式人生 > >關於數組內排序計算次數的問題

關於數組內排序計算次數的問題

length 分析 完成 print 次數 pri 技術 排列 關於

不廢話,直接上代碼。

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循環的目的是把最大的數放在最後,並在下次循環的時候去除,所以次數依次減一。

關於數組內排序計算次數的問題