排序算法大集锦_交换类——冒泡排序

冒泡排序是在高中时代就接触到的一种排序,较为简单,相对其它排序要容易理解

这一系列博客的特点就是——给出每趟排序的结果

本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧。

#include <stdio.h>

void BubbleSort(int *m, int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n-i;j++)
            if(m[j]<m[j-1])
            {
                m[j]=m[j]^m[j-1];
                m[j-1]=m[j]^m[j-1];
                m[j]=m[j]^m[j-1];
            }
        for(int t=0;t<10;t++)
            printf("%d ",m[t]);
        printf("\n");
    }
}

int main()
{
    int i;
    int a[10]={2,8,5,7,4,3,1,9,6,10};
    for(i=0;i<10;i++)
        printf("%d ",a[i]);

    printf("\n排序后\n");

    BubbleSort(a,10);

    for(i=0;i<10;i++)
        printf("%d ",a[i]);

    printf("\n");

    return 0;
}

运行之后

这里是可以对sort做个改进的

void BubbleSort(int *m, int n)
{
    int i,j;
    bool flag;
    for(i=0;i<n-1;i++)
    {
        flag=true;
        for(j=1;j<n-i;j++)
            if(m[j]<m[j-1])
            {
                m[j]=m[j]^m[j-1];
                m[j-1]=m[j]^m[j-1];
                m[j]=m[j]^m[j-1];
                flag=false;
            }
            for(int t=0;t<10;t++)
                printf("%d ",m[t]);
            printf("\n");
        if(flag)
            break;
    }
}

运行之后

时间: 2024-10-08 10:28:13

排序算法大集锦_交换类——冒泡排序的相关文章

排序算法大集锦_交换类——快速排序

感觉<算法导论>上面的那个例子要更容易理解,因为那个最起码比较直观! #include <stdio.h> int a[10]={2,8,5,7,4,3,1,9,6,10}; void QuickSort(int m, int n) { int s,begin,end; if(m>n) return; begin=m; end=n; s=a[m]; while(begin!=end) { while(a[end]>=s && begin<end)

排序算法大集锦_插入类——直接插入排序

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好.<算法导论>上面那个比喻,比做打扑克牌的插入新牌,就比较形象.所以这些博客就算是对自己的总结吧. #include <stdio.h> void InsertSort(int *m, int n) { int i,j,temp; for(i=1;i<n;i++) { temp=m[i]; j=i-1; while(j>=0 && te

排序算法大集锦_选择类——直接选择排序

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> void SelectSort(int *m, int n) { int i,j,k,temp; bool flag; for(i=0;i<n-1;i++) { k=i; flag=true; for(j=i+1;j<n;j++) if(m[j]<m[k]) k=j; if(k!=i

排序算法大集锦_插入类——希尔(shell)排序

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> void ShellSort(int *m, int n) { int i,flag,gap; for(gap=n;gap!=1;) { gap/=2; do { flag=0; for(i=0;i<n-gap;i++) if(m[i]>m[i+gap]) { m[i]=m[i]^m[i+

排序算法大集锦_二路归并排序_2&3(分治思想)

第一段代码和合并排序差不多,用它来和第二段代码--二路归并排序作对比. 这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> #include <limits.h> #include <malloc.h> void merge(int *m, int x, int y, int z) { int b1,b2,i,j,k; b1=y

排序算法大集锦_线性时间_计数排序

这个之前在<编程珠玑>上面看到过,当时就感觉特别神奇! 速度突破了其他排序算法的下限 后来在<算法导论>上面又看到了,感触颇深!所以一定好好啃透<算法导论> 这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> #include <string.h> int a[10]={2,8,6,7,3,3,1,9,6

排序算法大集锦_各种排序算法性能比较

对10000个1-10000的随机数进行排序,并显示出运行时间 数组是用以前用VC++&MatLab生成的,比较长...哈哈,感受一下计算机的速度! #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <time.h> int a[10000]={ 5282,330

排序算法大集锦_合并排序_1(分治思想)

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> #include <limits.h> #include <malloc.h> int a[10]={2,8,5,7,4,3,1,9,6,10}; void merge(int *m, int x, int y, int z) { int b1,b2,i,j,k; b1=y-x

查找和排序的基本操作:查找排序算法大集合

重点 查找算法着重掌握:顺序查找.二分查找.哈希表查找.二叉排序树查找. 排序算法着重掌握:冒泡排序.插入排序.归并排序.快速排序. 顺序查找 算法说明 顺序查找适合于存储结构为顺序存储或链接存储的线性表. 算法思想 顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功:若扫描结束仍没有找到关键字等于k的结点,表示查找失败. 算法实现 int sequenceSearch(int a[], int valu