冒泡排序的C语言程序(附教程)

489 阅读5分钟

Simplilearn - Online Certification Training Course Provider

所有课程

泡沫排序的C语言程序,将元素按顺序排序

C Program for Bubble Sort to Sort Elements in an Order

目录

可能会有这样的情况,你想按特定的顺序排列数据。这时,一个排序算法就会派上用场。C语言中的泡沫排序是一种简单明了的排序算法,如果元素不在预定的顺序内,它就会检查并交换它们。它对相邻的两个元素进行比较,找出哪一个更大或更小,并根据给定的条件进行交换,直到找到元素的最终位置。在这篇文章中,你将了解到冒泡排序,以及如何用不同的方法为冒泡排序的实现编写一个C程序。

Post Graduate Program: Full Stack Web Development

C语言中的冒泡排序算法

基本的冒泡排序算法可以解释如下。

bubbleSort(array)

for i <- 1 to indexOfLastUnsortedElement-1

if leftElement > rightElement

交换左元素和右元素

结束bubbleSort

这个算法对元素进行了交换,以获得最终的输出,其顺序是理想的。例如,如果你传递一个由以下元素组成的数组。(6, 3, 8, 2, 5, 7),经过冒泡排序实现的最终数组将是。(2, 3, 5, 6, 7, 8).

在C语言中进行冒泡排序的工作

如前所述,C语言程序中的冒泡排序是通过比较和交换数组中的相邻元素来进行的。让我们用一种逐步的方法来理解这一点。

假设我们想对一个有n个元素的数组进行升序排序,我们把它命名为arr,泡点排序算法是这样工作的。

  1. 从第一个索引开始:arr[0],比较第一个和第二个元素:arr[0]和arr[1]
  2. 如果arr[0]大于arr[1],它们将被交换
  3. 同样地,如果arr[1]大于arr[2],它们就被交换。
  4. 上述过程一直持续到最后一个元素arr[n-1]。

所有四个步骤在每次迭代中都会重复。在完成每个迭代后,最大的未排序元素被移到数组的末端。最后,当没有元素需要交换时,程序就结束了,我们就得到了升序排列的数组。现在我们知道了气泡排序的工作原理,让我们用不同的方法在C程序中实现它。

使用for循环实现泡泡分类的C语言程序

我们将使用for循环来编写第一个C语言程序,用于气泡排序。在这个例子中,我们将使用C语言中的嵌套for循环来对一个一维数组的元素进行排序。首先,我们将向用户询问元素的总数,然后询问值。一旦我们得到了这些元素,我们将使用for循环遍历这些元素并按升序排序。

#include <stdio.h>

int main(){

int arr[50], num, x, y, temp;

printf("Please Enter the Number of Elements you want in the array: ");

scanf("%d", &num);

printf("Please Enter the Value of Elements: ");

for(x = 0; x < num; x++)

scanf("%d", &arr[x])。

for(x = 0; x < num - 1; x++){

for(y = 0; y < num - x - 1; y++){

如果(arr[y] > arr[y + 1]){

temp = arr[y];

arr[y] = arr[y + 1];

arr[y + 1] = temp;

}

}

}

printf("实施冒泡排序后的数组:")。

for(x = 0; x < num; x++){

printf("%d", arr[x])。

}

返回0。

}

输出。

C_Program_for_Bubble_Sort_1

使用While循环进行冒泡排序的C程序

在这个例子中,我们将采用与前一个例子相同的方法。唯一不同的是,我们将用嵌套的while循环代替for循环。

#include <stdio.h>

int main(){

int arr[50], num, x, y, temp;

printf("Please Enter the Number of Elements you want in the array: ");

scanf("%d", &num);

printf("Please Enter the Value of Elements: ");

for(x = 0; x < num; x++)

scanf("%d", &arr[x])。

x = 0;

while(x < num - 1){

y = 0;

while(y < num - x - 1){

如果(arr[y] > arr[y + 1]){

temp = arr[y];

arr[y] = arr[y + 1];

arr[y + 1] = temp;

}

y++;

}

x++;

}

printf("实施冒泡排序后的数组:")。

for(x = 0; x < num; x++)

printf("%d", arr[x])。

返回0。

}

输出。

C_Program_for_Bubble_Sort_2.

使用函数进行冒泡排序的C程序

在这个泡泡排序的C语言程序中,我们将创建一个用户定义的函数,并在其中写下对数组元素进行排序的机制。下面是如何使用函数C语言中实现冒泡排序的方法

#include <stdio.h>

void bubbleSortExample(int arr[], int num){

int x, y, temp;

for(x = 0; x < num - 1; x++){

for(y = 0; y < num - x - 1; y++){

如果(arr[y] > arr[y + 1]){

temp = arr[y];

arr[y] = arr[y + 1];

arr[y + 1] = temp;

}

}

}

}

int main(){

int arr[50], n, x;

printf("Please Enter the Number of Elements you want in the array: ");

scanf("%d", &n);

printf("Please Enter the Value of Elements: ");

for(x = 0; x < n; x++)

scanf("%d", &arr[x])。

bubbleSortExample(arr, n);

printf("实施冒泡排序后的数组:")。

for(x = 0; x < n; x++){

printf("%d", arr[x])。

}

返回0。

}

输出。

C_Program_for_Bubble_Sort_3

使用指针进行冒泡分类的C程序

在这个气泡排序的C语言程序中,我们使用了C语言的指针。我们所做的只是创建了另一个用户定义的函数来规范其中指针的使用。下面是实现的过程。

#include <stdio.h>

void SwapFunc(int *i, int *j){

int Temp;

Temp = *i;

*i = *j;

*j = Temp。

}

void bubbleSortExample(int arr[], int num){

int x, y, temp;

for(x = 0; x < num - 1; x++) {

for(y = 0; y < num - x - 1; y++) {

if(arr[y] > arr[y + 1]) {

SwapFunc(&arr[y], &arr[y + 1])。

}

}

}

}

int main(){

int arr[50], n, x;

printf("Please Enter the Number of Elements you want in the array: ");

scanf("%d", &n);

printf("Please Enter the Value of Elements: ");

for(x = 0; x < n; x++)

scanf("%d", &arr[x])。

bubbleSortExample(arr, n);

printf("实施冒泡排序后的数组:")。

for(x = 0; x < n; x++)

{

printf("%d", arr[x])。

}

返回0。

}

输出。

C_Program_for_Bubble_Sort_4.

优化实现冒泡排序的C程序

在标准的冒泡排序中,所有的元素都要进行比较,即使最后的元素已经根据以前的迭代进行了排序。这增加了执行时间,可以通过优化冒泡排序的C程序来减少。我们所要做的就是引入一个额外的变量;我们把它命名为Swap。

如果发生了元素互换,变量Swap被设置为真;否则,它就是假的。当程序发现Swap变量的值为false时,它将理解为排序已经完成并脱离循环。这将通过优化算法来减少执行时间。下面的代码显示了如何优化C程序的冒泡排序。

#include <stdio.h>

// 用于冒泡排序的函数

void bubbleSortExample(int arr[], int n){

for (int i = 0; i < n - 1; ++i){

int Swap = 0;

// 比较数组元素

for (int x = 0; x < n - i - 1; ++x){

if (arr[x] > arr[x + 1]){

int temp = arr[x];

arr[x] = arr[x + 1];

arr[x + 1] = temp;

Swap = 1。

}

}

if (Swap == 0){ // 不需要换位。

休息。

}

}

}

void displayArray(int arr[], int n){

for (int x = 0; x < n; ++x){

printf("%d", arr[x])。

}

printf("\n")。

}

// 驱动方法

int main(){

int data[] = {27, 13, -54, 93, -20};

// 寻找数组的长度

int n = sizeof(data) / sizeof(data[0])。

bubbleSortExample(data, n);

printf("实施冒泡排序后的数组:\n")。

displayArray(data, n);

}

输出。

C_Program_for_Bubble_Sort_5.

C语言中冒泡排序的复杂性

时间复杂度

  • 最坏情况下的复杂度:如果数组元素是降序的,而我们想把它变成升序的,这就是最坏情况。最坏情况下的时间复杂度是O(n²)。
  • 最佳情况下的复杂度。最好的情况是所有的元素都已经排序了,不需要交换。这种情况下的时间复杂度是O(n)。
  • 平均情况下的复杂度。这是元素杂乱无章时的情况。泡沫排序中的平均情况的时间复杂度是O(n²)。

空间复杂度

  • 标准的冒泡排序算法的空间复杂度是O(1),因为需要一个额外的变量来临时保存被交换的元素。
  • 冒泡排序算法的优化实现的空间复杂度是O(2)。这是因为需要两个额外的变量。

C语言中冒泡排序的应用

使用C语言中的冒泡排序程序的最佳场景是:。

  • 复杂度不重要
  • 执行速度慢并不重要
  • 简洁易懂的编码是首选

C语言中冒泡排序的替代品

除了冒泡排序算法,你还可以使用以下排序算法对数组和列表进行排序。

结束语

在这篇文章中,你已经了解了什么是冒泡排序,以及如何以不同的方式编写冒泡排序的C程序。现在你可以把你的知识用于实践,磨练你的技能。