几种常见的排序算法(一)

博客介绍了选择排序和冒泡排序两种算法。选择排序是每次从未排序序列选最小(最大)数据与未排序序列首数据交换,时间复杂度O(n^2);冒泡排序是每次比较相邻数据,将较大的换到靠后位置,一趟排序可得无序序列最大数据,时间复杂度同样为O(n^2)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、选择排序

基本过程
每次从未排序序列中选择出最小(最大)的数据,和未排序序列的第一个数据交换。
时间复杂度:O(n^2)
过程图示
这里写图片描述
算法实现

void selectSort(int A[],int len)
{
    int i,j,k;
    for(i=0;i<len;i++){
       k=i;
       for(j=i+1;j<len;j++){
           if(A[j]<A[k])
               k=j;
       }
       if(i!=k){
           A[i]=A[i]+A[k];
           A[k]=A[i]-A[k];
           A[i]=A[i]-A[k];
       }
    }
}

二、冒泡排序

基本过程
每次都比较相邻的两个数据,把较大的交换到靠后的位置,则一趟排序之后就会得到无序序列中最大的那个数据。
**时间复杂度:**O(n^2)
过程图示
这里写图片描述
代码实现

void bubble_sort(int arr[], int len) {  
    int i, j;  
    for (i = 0; i < len - 1; i++)          //外层循环控制趟数,总趟数为len-1
        for (j = 0; j < len - 1 - i; j++)  //内层循环为当前i趟数 所需要比较的次数
            if (arr[j] > arr[j + 1])  
                swap(arr[j], arr[j + 1]);          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值