关于数组内排序计算次数的问题

Posted FN飞鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数组内排序计算次数的问题相关的知识,希望对你有一定的参考价值。

不废话,直接上代码。

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循环的目的是把最大的数放在最后,并在下次循环的时候去除,所以次数依次减一。

以上是关于关于数组内排序计算次数的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 O(mlogn) 时间内计算两个未排序数组的并集和交集

常见的排序算法

计数排序

计数排序是个啥?

如何计算快速排序期间发生的数组比较次数?

关于数组中的就地合并