开发者社区> 问答> 正文

冒泡法和选择排序的用法区别?

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

展开
收起
蛮大人123 2016-06-13 16:56:18 2166 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

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

     #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;
    }
    2019-07-17 19:36:27
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载