黑马程序员技术交流社区

标题: 求冒泡排序法和选择排序法 [打印本页]

作者: rzx    时间: 2015-11-3 21:28
标题: 求冒泡排序法和选择排序法
求冒泡排序法和选择排序法才能牢牢记住  求各位大神解救!!!!
作者: gabriel2016    时间: 2015-11-4 01:29
支持一下!
作者: Mu。    时间: 2015-11-4 17:47
本帖最后由 Mu。 于 2015-11-4 17:54 编辑

#include <stdio.h>  int maoPao(int arr[],int len){                                  int temp;     
                       //双重循环   
         for (int i = 0; i < len-1; i++) {               
                   //因为i的值没变化一次,跑了一趟,按照冒泡思想        
                   //有一个数已经下沉了      
                  //没有必要和已经有序的数组进行比较了                  
          for (int j = 0; j < len-1-i; j++) {                          
                    //交换a[j] 和 a[j+1]的值            
                    if (arr[j] > arr[j+1]) {                                 
                            temp = arr[j];               
                            arr[j] = arr[j+1];                 
                             arr[j+1] = temp;               
                 }                     
           }           
     }         
      return 0;
}
int main(int argc, const char * argv[]) {      
                int a[10]={1,200,23,45,12,34,19,4,388,63};         
                 //排序之前的        
    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;
}



作者: xiaobei    时间: 2015-11-4 18:52
我帖子里有冒泡法的程序,选择排序没有写
作者: jeffdy66    时间: 2015-11-4 22:22
#include <stdio.h>
void maoPao (int arr[],int len){
   
    int temp ;        //  0 1 2 3 4 5 6 7 8 9
   
    for( int i=0; i<len-1; i++){
        
        for(int j=0; j<len-1-i; j++){
            
            if(arr[j]>arr[j+1]){
               
                // 交换a[j]和a[j+1]的值
               
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
            
        }
     }
}
int main(int argc, const char * argv[]) {
   
    int a[10]={43,87,545,641,567,12,32,43,500,94};
   
    // 排序前
   
    for (int i=0; i<10; i++) {
        
        
        printf("%d\t",a[i]);
    }
   
    printf("\n");
   
    // 进行排序
   
    maoPao(a,10 );// 把数已经排序玩了
    // 遍历数组
    for(int i=0; i<10; i++){
        
        printf("%d\t",a[i]);
        
    }
    return 0;
}

作者: 253186803    时间: 2015-11-4 23:00
自己想想冒泡和选择的区别就行了
作者: 大雕会飞    时间: 2015-11-6 22:18
一个是先把最小的数依次排到右边,一个是把最大的数找出来,将它的值和第一个数的值交换,然后依次,思想很牛的。
作者: zhudong100    时间: 2015-11-7 12:58
建议理解记忆,冒泡就是各个相邻的元素相互比较,选择就是一个元素与与其它所有元素比较。每循环一次,都会有一个元素排好位置。
作者: 勇猛的小黑    时间: 2015-11-7 15:38
对于这两个排序,我也纠结了好久怎么才能记住,后来发现最主要的还是理解这两个排序的思想。然后有了思路一切都好说。
作者: 勇猛的小黑    时间: 2015-11-7 15:39
思路最重要
作者: 正在输入中...    时间: 2015-11-7 17:09
思想很重要,记住了思想,代码实现起来就很容易啦
作者: hulk374    时间: 2015-11-7 21:36
正在学习选择排序
作者: 逆光.初见    时间: 2015-11-7 23:31
方法 sort();  就ok!




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