黑马程序员技术交流社区

标题: 冒泡排序问题 [打印本页]

作者: 光哥    时间: 2015-11-16 22:42
标题: 冒泡排序问题
高价悬赏冒泡排序问题,据说很重要。
作者: ToBeJeek1    时间: 2015-11-16 23:17
楼主是问算法解释还是算法应用
作者: cube川    时间: 2015-11-17 10:06
视频里面很详细,而且这东西是固定模式,灵活套用
作者: linexs    时间: 2015-11-17 12:16
本帖最后由 linexs 于 2015-11-17 12:18 编辑

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

作者: linexs    时间: 2015-11-17 12:20
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;
}

作者: 马尔代夫的日出    时间: 2015-11-20 23:10
不错...................
作者: 呐小伟    时间: 2015-11-21 00:52
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:42
标题: 大数下沉,
本帖最后由 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
学习学习!
作者: 李凯666    时间: 2015-11-21 12:46
学冒泡排序之前先学选择排序,这样冒泡排序就简单多了
作者: 石油小硕    时间: 2015-11-21 22:48
学习了.........




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2