鲤鱼吐的泡泡是怎么样的呢?是不是从小到大,从水底浮上来?
可惜小鲤不会吐泡泡,不然可以让你好好看看~
算法解释
冒泡即从左到右,对相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
动图(来自网络)
代码详解
int i,j;
int a[100]; //(1)
for(i=0;i<n-1;i++){ //(2)
for(j=0;j<n-i-1;j++){
if(a[j-1]<a[j]){
swap(a[j-1],a[j]); //(3)
}
}
}
(1)这里我们就假设有一百个元素吧,i,j仅做循环使用;
(2)两重循环:一共要跑n-1趟,对n个元素来说,我们把n-1个元素比较好了,最后一个元素的位置一定确定;第二重循环:对每个元素进行n-i次,已经排过序的元素已经浮上去了,所以不必考虑。
来练个手吧^_^
void swap(int *a,int*b){
int tem;
tem=*a,*a=*b,*b=tem;
}
void sortColors(int* nums, int numsSize){
for (int i = 0; i < numsSize-1; i++) {
for (int j = 0; j < numsSize-i-1; j++) {
if (nums[j] > nums[j+1]) {
swap(&nums[j], &nums[j + 1]);
}
}
}
}
解题思路
红白蓝是什么鬼?你不会被题目给欺骗了吧?那再看看示例,不看题目我都知道是对nums数组排序。不过有重复的元素······管那么多干什么,干就是了。
代码
void swap(int *a,int*b){
int tem;
tem=*a,*a=*b,*b=tem;
}
void sortColors(int* nums, int numsSize){
for (int i = 0; i < numsSize-1; i++) {
for (int j = 0; j < numsSize-i-1; j++) {
if (nums[j] > nums[j+1]) {
swap(&nums[j], &nums[j + 1]);
}
}
}
}
完全套用模板。。。
冒泡较为简单,所以不说更多啦。
今天的内容已经结束了>_<
如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持ლ(´ڡ`ლ)
求三连和关注!!!