本文共 2319 字,大约阅读时间需要 7 分钟。
冒泡排序是一种简单且直观的排序算法,通过反复交换相邻元素,逐步将元素“冒”到正确的位置。传统的冒泡排序在每一轮中从数组的最开始逐步向下移动一位,直到处理完整个数组。然而,这种方法在数据已经较为有序的情况下可能会产生较多的不必要比较和交换,导致效率低下。因此,人们对冒泡排序进行了多次优化,以提高其效率。
传统的冒泡排序代码如下:
public static void sort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { int temp = 0; if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } if (isSorted) { break; }} 优化一通过在每一轮排序中添加一个标记,判断是否有元素交换。如果没有交换,说明数组已经有序,可以提前结束排序。
优化一代码如下:
public static void sort(int[] array) { for (int i = 0; i < array.length - 1; i++) { boolean isSorted = true; for (int j = 0; j < array.length - i - 1; j++) { int temp = 0; if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; isSorted = false; } } if (isSorted) { break; } }} 优化二通过记录最后一次交换的位置,确定无序数组的边界,从而减少不必要的比较。
优化二代码如下:
public static void sort(int[] array) { for (int i = 0; i < array.length - 1; i++) { boolean isSorted = true; int sortBorder = array.length - 1; for (int j = 0; j < sortBorder; j++) { int temp = 0; if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; isSorted = false; sortBorder = j; } } if (isSorted) { break; } }} 选择排序:
插入排序:
希尔排序:
快速排序:
归并排序:
堆排序:
计数排序:
桶排序:
基数排序:
冒泡排序通过简单的交换操作实现排序,但在较大数据量或接近有序数据时效率较低。通过优化,可以显著提高其性能。其他排序算法各有优劣,选择时需根据具体需求、数据特性和性能要求来决定。
转载地址:http://euer.baihongyu.com/