冒泡排序 C语言实例
冒泡排序(Bubble Sort)作为一种简单直观的排序算法,广泛应用于教学及小规模数据排序中。本文将详细介绍冒泡排序的基本原理,并通过C语言实现一个具体的冒泡排序实例,旨在帮助读者理解并掌握这一经典算法。
一、冒泡排序的基本原理
冒泡排序的基本思想是通过相邻元素的比较和交换,将较大的元素逐步“冒泡”到数组的末尾,而较小的元素则逐步“沉底”。具体步骤如下:
初始状态:给定一个无序数组。
第一轮比较:从数组的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。这样,经过一轮比较和交换后,最大的元素会被移动到数组的末尾。
后续轮次:重复上述步骤,但每次比较时忽略已经排好序的末尾元素。即,第二轮比较时,从数组的第一个元素到倒数第二个元素进行比较和交换;第三轮比较时,从数组的第一个元素到倒数第三个元素进行比较和交换,以此类推。
终止条件:当没有需要交换的元素时,排序完成。
二、C语言实现冒泡排序
下面是一个用C语言实现的冒泡排序实例:
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; i++) {
// 提前退出标志,如果在一轮比较中没有发生交换,则排序完成
int swapped = 0;
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;
swapped = 1;
}
}
// 如果没有发生交换,则排序完成,提前退出
if (swapped == 0) {
break;
}
}
}
// 打印数组函数
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++) {
printf(“%d “, arr[i]);
}
printf(”\n”);
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
printf(“排序前的数组: \n”);
printArray(arr, n);
bubbleSort(arr, n);
printf(“排序后的数组: \n”);
printArray(arr, n);
return 0;
}
三、代码解析
函数定义:
void bubbleSort(int arr[], int n)
:冒泡排序函数,接受一个整数数组和数组的大小作为参数。
void printArray(int arr[], int size)
:打印数组函数,用于输出排序前后的数组。
冒泡排序实现:
外层循环控制排序的轮数,每次循环将最大的元素移动到数组的末尾。
内层循环进行相邻元素的比较和交换。
swapped
变量用于记录当前轮次是否发生了交换,如果没有发生交换,则排序完成,提前退出循环。
主函数:
定义一个待排序的数组。
调用printArray
函数输出排序前的数组。
调用bubbleSort
函数对数组进行排序。
调用printArray
函数输出排序后的数组。
四、总结
冒泡排序虽然简单易懂,但其时间复杂度较高,为O(n^2),不适合大规模数据的排序。然而,对于小规模数据或教学演示,冒泡排序仍然是一个很好的选择。