黑马程序员技术交流社区

标题: 选择排序和冒泡排序的效率问题 [打印本页]

作者: 王春蕾    时间: 2014-4-27 16:38
标题: 选择排序和冒泡排序的效率问题
选择排序和冒泡排序哪个效率更高?百度说冒泡排序效率更高,但是我分别用这两种算法对一组数组进行排序,为什么结果是选择排序效率更高呢?代码如下:
  1. package com.itheima;
  2. /**
  3. * @author Administrator
  4. *
  5. */
  6. public class Test3 {
  7.         private static final String LINE_SEPARATOR = System
  8.                         .getProperty("line.separator");
  9.         public static void main(String[] args) {

  10.                 int[] arr = { 12, 34, 53, 2, -100, 60, 100, 89,12, 34, 53, 2, -100, 60, 100, 89 };
  11.                 int[] arr2 = { 12, 34, 53, 2, -100, 60, 100, 89,12, 34, 53, 2, -100, 60, 100, 89 };
  12.                 System.out.println("排序前数组:");
  13.                 // 显示数组中元素
  14.                 showArrElements(arr);
  15.                 System.out.println(LINE_SEPARATOR + "使用选择排序算法排序后数组:");
  16.                 // 排序算法循环的次数
  17.                 int num = selectSort(arr);
  18.                 showArrElements(arr);
  19.                 System.out.println(LINE_SEPARATOR + "使用冒泡排序算法排序后的数组:");
  20.                 int num2 = bubbleSort(arr2);
  21.                 showArrElements(arr2);
  22.                 System.out.println(LINE_SEPARATOR + "使用选择排序循环的次数为:" + num);
  23.                 System.out.println("使用冒泡排序算法排序循环次数为:" + num2);
  24.                 System.out.println("===============================");
  25.         }
  26.         /**
  27.          * 冒泡排序
  28.          *
  29.          * @param arr
  30.          * @return
  31.          */
  32.         private static int bubbleSort(int[] arr) {
  33.                 int num = 0;
  34.                 for (int i = 0; i < arr.length - 1; i++) {
  35.                         for (int j = 0; j < arr.length - 1 - i; j++) {
  36.                                 if (arr[j] > arr[j + 1]) {
  37.                                         swap(arr, j, j + 1);
  38.                                         num++;
  39.                                 }
  40.                         }
  41.                 }
  42.                 return num;
  43.         }

  44.         /**
  45.          * 显示数组中的各个元素
  46.          * @param arr
  47.          */
  48.         private static void showArrElements(int[] arr) {
  49.                 // 遍历数组中元素并显示
  50.                 for (int i : arr) {
  51.                         System.out.print(i + " ");
  52.                 }
  53.         }

  54.         /**
  55.          * 选择排序算法
  56.          *
  57.          * @param arr
  58.          */
  59.         public static int selectSort(int[] arr) {
  60.                 // 定义一个int变量,用于接收循环次数
  61.                 int num = 0;
  62.                 // 定义外循环,确定参与比较的元素
  63.                 for (int i = 0; i < arr.length - 1; i++) {
  64.                         // 判断前一个大于后一个,则进行位置置换
  65.                         for (int j = i + 1; j < arr.length; j++) {
  66.                                 if (arr[i] > arr[j]) {
  67.                                         num++;
  68.                                         swap(arr, i, j);
  69.                                 }
  70.                         }
  71.                 }
  72.                 return num;
  73.         }

  74.         /**
  75.          * 交换数组中的元素
  76.          *
  77.          * @param arr
  78.          * @param i
  79.          * @param j
  80.          */
  81.         private static void swap(int[] arr, int i, int j) {
  82.                 int temp = 0;
  83.                 temp = arr[i];
  84.                 arr[i] = arr[j];
  85.                 arr[j] = temp;
  86.         }

  87. }
复制代码

请问这样来判断这种算法的效率合不合适呢?
作者: SyouRai_Tsk    时间: 2014-4-27 18:43
软件设计师里面的有研究排序算法的效率是否稳定.如有兴趣,可以看一下
作者: z1342802487    时间: 2014-4-27 19:13
选择排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
从算法角度看,选择排序是对冒泡排序的改进,他减少了必要的交换的次数,只是查找次数和冒泡排序一样N*(N-1)/2。所以毫不夸张的说任何情况下选择排序的效率不会低于冒泡排序。
作者: fatlv123456    时间: 2014-4-27 19:41
效率高是指平均效率,具体要根据待排序的集合的顺序而定。就像领导年薪50W,民众年薪5W,国民收入27.5W和领导收入30W,民众收入25W,国民收入也是27.5W一样。
作者: 王春蕾    时间: 2014-4-27 20:32
z1342802487 发表于 2014-4-27 19:13
选择排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到 ...

我也感觉选择排序效率高点,但是为什么别人说冒泡效率高啊。、。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2