冒泡排序(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++) {
for (j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
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]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
冒泡排序的一个罕见优化是利用一个标记变量来检测在某次遍历中能否有元故旧换。假如在某次遍历中不产生交换,阐明数组曾经排序实现,可能提前停止算法。
void optimizedBubbleSort(int arr[], int n) {
int i, j, temp;
int swapped;
for (i = 0; i < n - 1; i++) {
swapped = 0;
for (j = 0; j < n - 1 - i; 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;
}
}
冒泡排序固然时光复杂度较高,但因为其简单易懂跟实现轻易,在修养中仍有重要地位。经由过程本文的讲解,信赖你曾经对C言语中的冒泡排序有了深刻的懂得。