选择排序和冒泡排序哪个效率更高?百度说冒泡排序效率更高,但是我分别用这两种算法对一组数组进行排序,为什么结果是选择排序效率更高呢?代码如下:
- 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;
- }
- }
复制代码
请问这样来判断这种算法的效率合不合适呢? |