用C语言实现“冒泡排序变形”,基础编程由此开始(第二十四节)

今天这道题目呢,是大家很熟悉的冒泡排序了。

我们都知道,用冒泡排序将N个整数按从小到大排序,就是从头到尾比较相邻的两个元素,如果前面的元素大于后面的元素,就交换两个元素的位置,通过一遍排序后,则最后面的元素必定是最大的那个元素,然后用相同的方法对前面N-1个元素进行排序,得到最终结果。

这是我们之前用冒泡排序打印得到最终结果,但今天这道冒泡排序的变形呢,还多了两个要求。

分别是:1、给定整数N和K,(1<=K<N<100),在第二行中给出N个待排序的整数。

2、在一行中打印冒泡排序第K遍后的中间结果数列,数字间以空格分隔,但结尾没有空格。

梳理逻辑

冒泡排序的逻辑我们不用多讲,之前大家也都了解了。

归根结底还是对整数N和K的一个处理。

1、第一行输入整数N和K,并给定范围,那就用到一个scanf函数与条件判断语句。

2、第二行给出N个待排序的整数,用到一个for循环,与scanf函数输入数组。

3、扫描第K遍后得到中间结果数列,这才是最为复杂的地方,在for循环中,外循环只需要进行K次循环即可,最后打印出最终结果。

代码实现

//冒泡排序的变形
#include
int main(){
    int N;//N个整数
    int K;//扫描K遍
    scanf("%d %d", &N,&K);//第一行给出N和K
    int Bubble[100];
    int Temp;//Temporary Variable,一个临时变量来存储元素
    int count = 0;//计数法
    if(K>=N){
        scanf("%d %d", &N,&K);//第一行重新给出N和K
    }
    if(N>100){
        scanf("%d %d", &N,&K);//第一行重新给出N和K
    }
    if(K<1){
        scanf("%d %d", &N,&K);//第一行重新给出N和K
    }
    for(int i=0; i<N;i++){
        scanf("%d",&Bubble[i]);
    }
    for(int j = 0; j < K; j++){//K次循环
        for(int i = 0; i < n-1 in-1 ifbubblei>Bubble[i+1]){
                Temp = Bubble[i+1];
                Bubble[i+1] = Bubble[i];
                Bubble[i] = Temp;
            }
        }
    }
    for(int q = 0; q < N;q++){//打印最终结果
        if(count!=0){
            printf(" ");
        }
        printf("%d", Bubble[q]);
        count++;
    }
}

结果测试

总结

总的来说,冒泡排序的变形难度的确提升了点,关键还是对for循环的一个掌握程度,如果对for循环比较熟悉的话,那么只需要在for循环的基础上进行一个修改即可。

原文链接:,转发请注明来源!