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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于冒泡和选择排序的区别在于内层循环,冒泡是大数下沉,小数上浮,一列之间的比较交换;
选择排序是大小之间的比较,一行之间的交换。个人理解,不知道是不时这样,请高人指点...


//冒泡排序
void test1(int arr[],int len){

    for(int i=0;i<len-1;i++){

        for(int j=0;j<len-1;j++){

            if(arr[j]>arr[j+1]){

                int temp =arr[j];
                arr[j] =arr[j+1];
                arr[j+1] =temp;
            }
        }

    }

}


//选择排序

void test2(int arr[],int len){

    for(int i=0;i<len-1;i++){

        for(int j=1+i;j<len;j++){

            if(arr>arr[j]){

                int temp =arr;
                arr = arr[j];
                arr[j] = temp;

            }

        }
    }

}

3 个回复

倒序浏览
你那个好像不是选择排序吧..............选择法的好处是先找出每趟的最大或者最小下标,经过判断后再互换位置,尽可能少的互换位置,提高了性能,而冒泡排序交换位置要远远多于选择法。
其实也没什么卵用,只排序几个数的话,性能不是问题,方便才是唯一。
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
    @autoreleasepool
    {
        int a[10];
        int n = 10;
        for (int i = 0; i < n; i++) {
            a = arc4random_uniform(10);//在0~9中选择随机数
        }
        for (int i = 0; i < n; i++) {
            printf("%4d",a);
        }
        printf("\n");
        for (int i = 0; i < n - 1; i++)
        {
            int k = i;
            for (int j = i + 1; j < n; j++)
            {
                if (a[k]>a[j])//把最小的数的下标给k
                {
                    k = j;
                }
            }
            if (k != i) {//确保每趟的i下标代表元素值是其后面数中最小的
                int temp = a;
                a = a[k];
                a[k] = temp;
            }
        }
        for (int i = 0; i < n; i++) {
            printf("%4d",a);
        }

    }

    return 0;
}
   9   5   0   0   8   5   6   6   7   6

   0   0   5   5   6   6   6   7   8   9


回复 使用道具 举报
都是大牛,又学到了知识
回复 使用道具 举报
主要是思路  
选择排序:从第一个数开始固定 向后依次比较  
冒泡排序:两两比较,大数下沉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马