• Java 数据结构教程

Java 数据结构 - 冒泡排序



排序是指以特定格式排列数据。排序算法指定以特定顺序排列数据的方式。最常见的顺序是数值顺序或字典顺序。

排序的重要性在于,如果数据以排序方式存储,则数据搜索可以被优化到非常高的水平。排序还用于以更易读的格式表示数据。以下是现实生活中排序的一些示例。

  • 电话簿 - 电话簿按姓名对人员的电话号码进行排序存储,以便可以轻松搜索姓名。

  • 字典 - 字典按字母顺序存储单词,以便于搜索任何单词。

原地排序和非原地排序

排序算法可能需要一些额外的空间来比较和临时存储一些数据元素。这些算法不需要任何额外的空间,排序据说发生在原地,或者例如,在数组本身内。这称为原地排序。冒泡排序就是一个原地排序的例子。

但是,在某些排序算法中,程序需要的空间大于或等于正在排序的元素。使用等于或更多空间的排序称为非原地排序。归并排序就是一个非原地排序的例子。

Java 中的冒泡排序

冒泡排序是一种简单的排序算法。这种排序算法是一种基于比较的算法,其中比较每对相邻元素,如果不按顺序则交换元素。该算法不适用于大型数据集,因为其平均和最坏情况的复杂度为 Ο(n2),其中 n 是项目数。

算法

我们假设list是一个包含n个元素的数组。我们进一步假设swap()函数交换给定数组元素的值。

Step 1: Assume i is the first element of the list then, compare the elements i and i+1. (first two elements of the array)
Step 2: If the i (first element) is greater than the second (i+1) swap them.
Step 3: Now, increment the i value and repeat the same.(for 2nd and 3rd elements) 
Step 4: Repeat this till the end of the array.

示例

import java.util.Arrays;
public class BubbleSort {
   public static void main(String args[]) {
      int[] myArray = {10, 20, 65, 96, 56};      
      System.out.println("Contents of the array before sorting : ");
      System.out.println(Arrays.toString(myArray));
      
      int n = myArray.length;
      int temp = 0;
      
      for(int i = 0; i<n-1; i++) {
         for(int j = 0; j<n-1; j++) {
            if (myArray[j] > myArray[j+1]) {
               temp = myArray[i];
               myArray[j] = myArray[j+1];
               myArray[j+1] = temp;
            }
         }         
      }           
      System.out.println("Contents of the array after sorting : ");
      System.out.println(Arrays.toString(myArray));       
   }
}

输出

Contents of the array before sorting : 
[10, 20, 65, 96, 56]
Contents of the array after sorting : 
[10, 10, 20, 10, 20]
广告