冒泡排序算法(c语言)

冒泡排序算法整理

面试的时候问到二分查找的时候居然忘记最重要的步骤,先进行排序了,面试官也提醒了怎么还是没反应过来呢,所以还是好好理一下一些常用的排序算法,努力总是会有收获的,加油!

冒泡排序算法,以升序为例,假设一个数组中,我们比较相邻的元素,如果第一个比第二个大,我们就交换他们两个,通过第一次的冒泡就可以找到所有元素中最大的那一个并实现将它排在数组的最后的位置,之后再进行第二次冒泡,也是同样比对两个相邻的元素的大小,进而可以找到第二大的元素并将它排在数组后面,以此重复,直到没有数字需要比较。

举个例子:
数组
34  12  67  22  11  3  21  56 
数组共8个元素,所以我们需要进行8-1=7次的冒泡,每次冒泡需要进行比对的次数随着冒泡次数的增加也相应减少,比如第1次冒泡,我们需要进行7次比对,但是第2次冒泡我们只需要进行6次比对,因为这个时候数组中最大的元素已经找到了。
我们进行第一次冒泡:
(1)34和12比对
12  34  67  22  11  3  21  56

(2)34和67比对
12  34  67  22  11  3  21  56

(3)67和22比对
12  34  22  67  11  3  21  56

(4)67和11比对
12  34  22  11  67  3  21  56

(5)67和3比对
12  34  22  11  3  67  21  56

(6)67和21比对
12  34  22  11  3  21  67  56

(7)67和56比对
12  34  22  11  3  21  56  67

可以得到数组的最大值存放在数组的最后位置;之后依次重复即可得到排好序的数组。

C语言实现如下:

#include <stdio.h>
void bubble_sort(int a[],int n){
    int temp;//swap 
    for(int i=0;i<n-1;i++){ //多少次起泡 
        for(int j=0;j<n-1-i;j++){ //该次起泡中需要进行多少次比较 
            if(a[j]>a[j+1]){
                temp =a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
} 
int main(){
    int n;
    int number[1000];
    printf("please input the number of the array:");
    scanf("%d",&n);
    printf("please input the array\n");
    for(int t=0;t<n;t++){
        scanf("%d",&number[t]);
    }
    bubble_sort(number,n);
    printf("the bubble_sort result is: ");
    for(int k=0;k<n;k++){
        printf("%d  ",number[k]);
    }    
    return 0; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值