用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<stdio.h>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; i++){//N-1次循环 if(Bubble[i]>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循环的基础上进行一个修改即可。
赞 (0)