A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 光哥 中级黑马   /  2015-11-16 22:42  /  1852 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

高价悬赏冒泡排序问题,据说很重要。

10 个回复

倒序浏览
楼主是问算法解释还是算法应用
回复 使用道具 举报
视频里面很详细,而且这东西是固定模式,灵活套用
回复 使用道具 举报
本帖最后由 linexs 于 2015-11-17 12:18 编辑

嵌套for循环,遍历所有元素,比较相邻两个元素,若符合条件就借助临时变量交换我写过这个冒泡和选择排序算法的对比 http://bbs.itheima.com/thread-261111-1-1.html
回复 使用道具 举报
include <stdio.h>

int len;
void cmpMax (int getArr[]){

// 冒泡排序,倒着从小到开始排
// 遍历数组,到末尾第二个元素为止
    for (int i = 0; i< len-1; i++) { //
        // 遍历数组 从第i+1个元素开始
        for (int j= i+1; j < len; j++) {
            // 符合条件则交换
            if (getArr[i] < getArr[j]) {
               
                int tmp = getArr[i];
                getArr[i]= getArr[j];
                getArr[j] = tmp;
               
            }
        }
    }
// 选择排序 ,正向从大到开始排
// 遍历数组,到末尾第二个元素为止
    for (int i = 0; i< len-1; i++) { //
        // 遍历数组 从第i+1个元素开始
        for (int j= i+1; j < len; j++) {
            // 符合条件则交换
            if (getArr[i] < getArr[j]) {
               
                int tmp = getArr[i];
                getArr[i]= getArr[j];
                getArr[j] = tmp;
               
            }
        }
    }
for (int i= 0; i< len; i++) {
        printf("getArr[%d] == %d\n",i,getArr[i]);
    }
}

int main(int argc, const char * argv[]) {
    // insert code here...
   
    int arr[]= {1,3,5,7,9,0};
    len = sizeof(arr)/sizeof(int);
   
    cmpMax(arr);
   
    printf("The end!\n");
    return 0;
}
回复 使用道具 举报
不错...................
回复 使用道具 举报
void maoPao(int acc[],int len)
{
int temp;
      for(int i=0;i<len-1;i++)
{
    for(int j=0;j<len-1-i;j++)
    {
        if(acc[j]<acc[j+1])
           {
               temp=acc[j];
               acc[j]=acc[j+1];
               acc[j+1]=temp;
           }
    }
}

}

int main(){
    int a[6]={1,2,4,3,8,5};

    maoPao(a,6);
    for (int i=0;i<6;i++) {
        printf("%d\t",a[i]);
    }
   
    return 0;
}


回复 使用道具 举报

大数下沉,

本帖最后由 w苗子007 于 2015-11-21 10:44 编辑


#include <stdio.h>

void maoPao(int arr[],int len){
    int temp;
    for (int i=0; i<len-1; i++) {
        
     //因为i的值没变化一次,跑了一趟,按照冒泡的思想
     //有一个数已经下沉了
     //没有必要和已经有序的数据进行比较了
     //j<len-1-i
        for (int j=0; j<len-1-i; j++) {
            if (arr[j]>arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }



}

int main(int argc, const char * argv[]) {
    int a[10]={12,32,56,43,675,34,23,453,6443,3};
   
    for (int i=0; i<10; i++) {
        printf("%d\t",a);
    }
    printf("\n");
    maoPao(a, 10);
    for (int i=0; i<10; i++) {
        printf("%d\t",a);
    }
    printf("\n");
    return 0;
}
回复 使用道具 举报
chensc 金牌黑马 2015-11-21 12:38:13
9#
学习学习!
回复 使用道具 举报
李凯666 来自手机 中级黑马 2015-11-21 12:46:06
10#
学冒泡排序之前先学选择排序,这样冒泡排序就简单多了
回复 使用道具 举报
学习了.........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马