做新网站 备案证明交接杭州seo外包服务
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
冒泡排序的原理:
- 比较与交换:
- 冒泡排序从数列的第一个元素开始,比较相邻的两个元素。
- 如果他们的顺序(如从小到大)错误,就交换他们的位置。
- 这样,较大的元素就像气泡一样“浮”到数列的末端。
- 多轮遍历:
- 经过第一轮遍历后,最大的元素会被“冒泡”到数列的最后一位。
- 接下来,算法会忽略已经排序好的最后一个元素,继续对剩下的元素进行同样的操作。
- 每一轮遍历后,都会有一个元素被放到它最终的位置上。
- 终止条件:
- 当算法发现没有元素需要交换时(即没有发生任何冒泡),说明数列已经排序完成,此时可以终止算法。
示例:
假设有一个数列 {64, 34, 25, 12, 22, 11, 90}
,我们想要按照从小到大的顺序排序它。
第一轮遍历:
- 比较 64 和 34,交换它们(34, 64)。
- 比较 34 和 25,交换它们(25, 34, 64)。
- 比较 25 和 12,交换它们(12, 25, 34, 64)。
- ...(继续比较和交换)
- 第一轮结束后,最大的元素 90 被移动到了最后一位。
第二轮遍历(忽略已经排序好的 90):
- 经过类似的比较和交换后,次大的元素 64 会被移动到倒数第二位。
以此类推,经过多轮遍历后,数列会被排序完成。
效率:
冒泡排序的效率并不高,特别是对于大数据集来说。它的时间复杂度为 O(n^2),其中 n 是待排序数列的长度。但是,由于其实现简单且易于理解,它通常被用作教学示例。在实际应用中,更高效的排序算法(如快速排序、归并排序、堆排序等)通常会被优先考虑。
Java实现冒泡排序法
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {// 使用冒泡法进行排序int[] arr = new int[5];int number;int i;Scanner sc = new Scanner(System.in);for(i = 0 ; i < arr.length ; i++){arr[i] = sc.nextInt();}for(i = 0 ; i < arr.length -1 ; i++){// 冒泡法for(int j = 0 ; j < arr.length - 1 -i ; j++){if (arr[j] > arr[j+1]){number = arr[j];arr[j] = arr[j+1];arr[j+1] = number;}}}for(i = 0 ; i < arr.length ; i++){System.out.println(arr[i]);}}
}
c语言实现
#include <stdio.h> void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n-1; i++) { // 外层循环控制排序的轮数 for (j = 0; j < n-i-1; j++) { // 内层循环控制每轮比较的次数 if (arr[j] > arr[j+1]) { // 如果前一个元素大于后一个元素,则交换它们 temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
} int main() { int arr[100], n, i; printf("Enter the number of elements: "); scanf("%d", &n); printf("Enter %d elements: ", n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } bubbleSort(arr, n); printf("Sorted array: \n"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0;
}
python实现
def bubble_sort(arr): n = len(arr) for i in range(n): # 创建一个标志位,用于判断本轮是否有交换 swapped = False for j in range(0, n - i - 1): # 遍历到倒数第i+1个元素即可,因为最后i个元素已经有序 if arr[j] > arr[j + 1]: # 如果前一个元素大于后一个元素,则交换它们 arr[j], arr[j + 1] = arr[j + 1], arr[j] # 交换发生,标志位设为True swapped = True # 如果本轮没有发生交换,说明数组已经有序,可以提前结束排序 if not swapped: break return arr # 测试代码
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort(arr)
print("Sorted array:", sorted_arr)