computer9507 2016-05-04 07:36 采纳率: 100%
浏览 1265
已采纳

哪位大神能具体讲一下冒泡法和选择排序的用法,区别?

哪位大神能具体讲一下冒泡法和选择排序的用法,区别?图片说明图片说明图片说明图片说明

  • 写回答

8条回答

  • 小灸舞 2016-05-04 07:55
    关注

    冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

     #include <stdio.h>
    #define SIZE 8
    
    void bubble_sort(int a[], int n);
    
    void bubble_sort(int a[], int n)
    {
        int i, j, temp;
        for (j = 0; j < n - 1; j++)
            for (i = 0; i < n - 1 - j; i++)
            {
                if(a[i] > a[i + 1])
                {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
    }
    
    int main()
    {
        int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
        int i;
        bubble_sort(number, SIZE);
        for (i = 0; i < SIZE; i++)
        {
            printf("%d", number[i]);
        }
        printf("\n");
    }
    

    选择排序每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

     #include<stdio.h>
    #include<stdlib.h>
    
    void swap(int*a,int*b)
    {
        int temp;
        temp=*a;
        *a=*b;
        *b=temp;
    }
    void select_sort(int A[],int n)
    {
        register int i,j,min,m;
        for(i=0;i<n-1;i++)
        {
            min=i;//查找最小值
            for(j=i+1;j<n;j++)
            {
                if(A[min]>A[j])
                {
                    min=j;
                }
            }
            if(min!=i)
            {
                swap(&A[min],&A[i]);
                printf("第%d趟排序结果为:\n",i+1);
                for(m=0;m<n;m++)
                {
                    if(m>0)
                    {
                        printf("");
                    }
                    printf("%d",A[m]);
                }
                printf("\n");
            }
        }
    }
    int main(void)
    {
        int n;
        while(scanf("%d",&n)!=EOF)    /* VS2013等版本中需使用scanf_s(),VC6.0中使用scanf() */
        {
            int i;
            int*A=(int*)malloc(sizeof(int)*n);
            for(i=0;i<n;i++)
            {
                scanf("%d",&A[i]);
            }
            select_sort(A,n);
            printf("最终排序结果为:\n");
            for(i=0;i<n;i++)
            {
                if(i>0){
                    printf("");
                }
                printf("%d",A[i]);
            }
            printf("\n");
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功