冒泡排序和选择排序(C语言)

Posted 计协的那点事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序和选择排序(C语言)相关的知识,希望对你有一定的参考价值。

冒泡排序和选择排序(C语言)

 

1.冒泡排序

基本思想:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。

#include<stdio.h>//冒泡排序算法void bubbleSort(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[] = { 10,6,5,2,3,8,7,4,9,1 };   

 int n = sizeof(arr) / sizeof(int);
bubbleSort(arr, n);
printf("排序后的数组为:\n");   

for (int j = 0; j<n; j++)
printf("%d ", arr[j]);

printf("\n"); 
return 0;

分析:

最差时间复杂度为O(n^2),平均时间复杂度为O(n^2)。稳定性:稳定。辅助空间O(1)。

2.选择排序

基本思想:依次选出数组最小的数放到数组的前面。首先从数组的第二个元素开始往后遍历,找出最小的数放到第一个位置。再从剩下数组中找出最小的数放到第二个位置。以此类推,直到数组有序。

#include<stdio.h>

void SelectSort(int *a, int n) {  

 for (int i = 0; i < n; i++)
{int key = i; //临时变量用于存放数组最小值的位置
for (int j = i + 1; j < n; j++) {         

if (a[j] < a[key]) {    

               key = j;    //    记录数组最小值位置            }
       }            if (key != i)
 {int tmp = a[key]; a[key] = a[i]; a[i] = tmp;// 交换最小值            }
   }
}int main() {    int a[] = { 12,4,15,2,6,22,8,10,1,33,45,24,7 };  

 int n = sizeof(a) / sizeof(int);
SelectSort(a, n);

printf("排序好的数组为: "); 

for (int k = 0; k < n; k++)

printf("%d ", a[k]);
printf("\n");    return 0;
}

分析:

最差、最优、平均时间复杂度都为O(n^2)。辅助空间为O(1)。稳定性:不稳定。

排版:张译丹

审核:陈佳


以上是关于冒泡排序和选择排序(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

C语言冒泡排序。

一起来学C语言———C语言之冒泡排序和选择排序

c语言冒泡排序法代码一直排序错误,有时只能排前两个,不明白原因,请问究竟哪里写错了,谢谢!

c语言冒泡排序最终结果错误

C语言中的排序算法--冒泡排序,选择排序,希尔排序

C语言 冒泡排序 选择排序