c冒泡排序代码

冒泡排序是一种简单的排序算法,它重复地遍历待排序的元素列表,比较相邻的两个元素,并将它们交换位置,直到整个列表都是有序的。这个过程会多次重复,每次遍历都会把最大的元素浮到最后,因此称为冒泡排序。

以下是冒泡排序的Python代码示例:

python
def bubble_sort(arr): n = len(arr) # 外层循环控制遍历次数 for i in range(n): # 标记,用于提前退出循环 swapped = False # 内层循环进行比较和交换 for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: # 交换元素 arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True # 如果内层循环没有发生交换,说明已经排序完成,提前退出外层循环 if not swapped: break # 测试示例 arr = [64, 34, 25, 12, 22, 11, 90] bubble_sort(arr) print("排序后的数组:", arr)

这段代码定义了一个bubble_sort函数,它接受一个待排序的列表作为参数,并对其进行排序。在内层循环中,相邻的元素比较并交换,如果没有发生交换,说明列表已经有序,可以提前退出外层循环,以提高效率。

运行上述代码后,将会输出排序后的数组。冒泡排序是一种简单但效率较低的排序算法,对于大型数据集不是最佳选择,但对于小型数据集或教学示例非常有用。

冒泡排序的特性和优化:

时间复杂度: 冒泡排序的平均和最坏情况时间复杂度都为O(n^2),其中n是待排序元素的数量。这使得它不适合对大型数据集进行排序。

稳定性: 冒泡排序是稳定的排序算法,即相等元素的相对顺序在排序后不会改变。

适用场景: 冒泡排序在实际应用中不常用,但它的教学价值很高,因为它易于理解和实现。

优化: 冒泡排序可以进行一些优化,如设置一个标志来检查是否发生了交换,如果没有发生交换,就可以提前退出外层循环。这样可以减少不必要的比较操作。另外,可以记录每轮最后一次发生交换的位置,下一轮只需要比较到这个位置即可,进一步提高效率。

冒泡排序的基本原理在不同编程语言中都是相同的,只是语法有所不同。以下是一些常见编程语言中的冒泡排序示例:

C语言:

c
#include <stdio.h> void bubble_sort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, n); printf("排序后的数组: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }

Java语言:

java
public class BubbleSort { public static void bubbleSort(int arr[]) { int n = arr.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } public static void main(String[] args) { int arr[] = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.print("排序后的数组: "); for (int num : arr) { System.out.print(num + " "); } } }

这些示例展示了如何在C语言和Java中实现冒泡排序。不同编程语言之间的主要区别在于语法和数组的处理方式,但冒泡排序的核心逻辑保持不变。

标签