黑马程序员技术交流社区
标题:
选择排序和冒泡排序的效率问题
[打印本页]
作者:
王春蕾
时间:
2014-4-27 16:38
标题:
选择排序和冒泡排序的效率问题
选择排序和冒泡排序哪个效率更高?百度说冒泡排序效率更高,但是我分别用这两种算法对一组数组进行排序,为什么结果是选择排序效率更高呢?代码如下:
package com.itheima;
/**
* @author Administrator
*
*/
public class Test3 {
private static final String LINE_SEPARATOR = System
.getProperty("line.separator");
public static void main(String[] args) {
int[] arr = { 12, 34, 53, 2, -100, 60, 100, 89,12, 34, 53, 2, -100, 60, 100, 89 };
int[] arr2 = { 12, 34, 53, 2, -100, 60, 100, 89,12, 34, 53, 2, -100, 60, 100, 89 };
System.out.println("排序前数组:");
// 显示数组中元素
showArrElements(arr);
System.out.println(LINE_SEPARATOR + "使用选择排序算法排序后数组:");
// 排序算法循环的次数
int num = selectSort(arr);
showArrElements(arr);
System.out.println(LINE_SEPARATOR + "使用冒泡排序算法排序后的数组:");
int num2 = bubbleSort(arr2);
showArrElements(arr2);
System.out.println(LINE_SEPARATOR + "使用选择排序循环的次数为:" + num);
System.out.println("使用冒泡排序算法排序循环次数为:" + num2);
System.out.println("===============================");
}
/**
* 冒泡排序
*
* @param arr
* @return
*/
private static int bubbleSort(int[] arr) {
int num = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
num++;
}
}
}
return num;
}
/**
* 显示数组中的各个元素
* @param arr
*/
private static void showArrElements(int[] arr) {
// 遍历数组中元素并显示
for (int i : arr) {
System.out.print(i + " ");
}
}
/**
* 选择排序算法
*
* @param arr
*/
public static int selectSort(int[] arr) {
// 定义一个int变量,用于接收循环次数
int num = 0;
// 定义外循环,确定参与比较的元素
for (int i = 0; i < arr.length - 1; i++) {
// 判断前一个大于后一个,则进行位置置换
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
num++;
swap(arr, i, j);
}
}
}
return num;
}
/**
* 交换数组中的元素
*
* @param arr
* @param i
* @param j
*/
private static void swap(int[] arr, int i, int j) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
复制代码
请问这样来判断这种算法的效率合不合适呢?
作者:
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