黑马程序员技术交流社区

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

作者: wx_hg1q2t6v    时间: 2014-12-17 19:26
标题: 冒泡排序法和选择排序法的区别:
冒泡排序法:  
设有n个数要求从小到大排列,冒泡排序法的排序过程分为如下的n-1步:  
第1步 从下向上,相邻两数比较,小者调上。反复执行n-1次,第1个数最小。
第2步 从下向上,相邻两数比较,小者调上。反复执行n-2次,前2个数排好。
第k步 从下向上,相邻两数比较,小者调上。反复执行n-k次,前k个数排好。 ...  
第n-1步 从下向上,相邻两数比较,小者调上。反复执行1次,排序结束。

选择排序法:   
设有n个数要从小到大排列,选择排序法排序过程分为n-1步:   
第一步 在第1n个数中找出最小数,然后和第一个数交换,前一个数排好。  
第二步 在第2n个数中找出最小数,然后和第二个数交换,前两个数排好.  ...   
第二步 在第kn个数中找出最小数,然后和第k个数交换,前k个数排好.

作者: 从今以后    时间: 2014-12-17 22:20
冒泡是无脑交换,比自己小(或者大)就交换,一路换过去;选择是找出最值再交换
作者: se7ven    时间: 2014-12-17 23:37
哥们说的好,我帮你附图一张
作者: se7ven    时间: 2014-12-17 23:39
int main() {
        //定义一个数组
        int a[]={3,5,1,4,9};
        
        //冒泡排序
        for (int i=0; i<5-1; i++) {
            for (int j=0; j<5-1-i; j++) {
                if (a[j]>a[j+1]) {
                    int t=a[j+1];
                    a[j+1]=a[j];
                    a[j]=t;
                }
            }
        }
        for (int i=0; i<5; i++) {
            printf("%d\t",a[i]);
            
        }
    printf("\n");
    return 0;
}
作者: se7ven    时间: 2014-12-17 23:41
int main(){
    //定义一个数组
    int a[]={3,5,1,4,9};
   
    //选择排序
    for (int i=0; i<5; i++) {
        for (int j=i+1; j<5; j++) {
            if (a[i]>a[j]) {
                int t=a[j];
                a[j]=a[i];
                a[i]=t;
            }
        }
    }
    for (int i=0; i<5; i++) {
        printf("%d\t",a[i]);
        
    }
    printf("\n");
    return 0;
}




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