C语言-排序

C语言-排序

冒泡排序

两两比较,大的放后面。

每比较一轮,记录交换的次数。当交换的次数为零时,则表示排序完成。

c 复制代码
char a[10]={9,5,1,2,4,7,6,8,3,0};


9大于5 交换  5 9  1 2 4 7 6 8 3 0    
9大于1 交换 5  1 9  2 4 7 6 8 3 0 
9大于2 交换 5 1  2 9  4 7 6 8 3 0
9大于4 交换 5 1 2  4 9  7 6 8 3 0
9大于7 交换 5 1 2 4  7 9  6 8 3 0 
9大于6 交换 5 1 2 4 7  6 9  8 3 0
9大于8 交换 5 1 2 4 7 6  8 9  3 0
9大于3 交换 5 1 2 4 7 6 8  3 9  0
9大于0 交换 5 1 2 4 7 6 8 3  0 9
交换次数 9

5大于1 交换  1 5  2 4 7 6 8 3 0 9
5大于2 交换 1  2 5  4 7 6 8 3 0 9
5大于4 交换 1 2  4 5  7 6 8 3 0 9
5小于7 不动 1 2 4  5 7  6 8 3 0 9
7大于6 交换 1 2 4 5  6 7  8 3 0 9
7小于8 不动 1 2 4 5 6  7 8  3 0 9
8大于3 交换 1 2 4 5 6 7  3 8  0 9
8大于0 交换 1 2 4 5 6 7 3  0 8  9
8小于9 不动 1 2 4 5 6 7 3  0  8 9
交换次数 6

1小于2 不动  1 2  4 5 6 7 3 0 8 9
2小于4 不动 1  2 4  5 6 7 3 0 8 9
4小于5 不动 1 2  4 5  6 7 3 0 8 9
5小于6 不动 1 2 4  5 6  7 3 0 8 9
6小于7 不动 1 2 4 5  6 7  3 0 8 9
7大于3 交换 1 2 4 5 6  3 7  0 8 9
7大于0 交换 1 2 4 5 6 3  0 7  8 9
7小于8 不动 1 2 4 5 6 3 0  7 8  9
8小于9 不动 1 2 4 5 6 3 0 7  8 9 
交换次数 2
....
 ..
....
0小于1 不动  0 1  2 3 4 5 6 7 8 9
1小于2 不动 0  1 2  3 4 5 6 7 8 9
2小于3 不动 0 1  2 3  4 5 6 7 8 9
3小于4 不动 0 1 2  3 4  5 6 7 8 9
4小于5 不动 0 1 2 3  4 5  6 7 8 9
5小于6 不动 0 1 2 3 4  5 6  7 8 9
6小于7 不动 0 1 2 3 4 5  6 7  8 9
7小于8 不动 0 1 2 3 4 5 6  7 8  9
8小于9 不动 0 1 2 3 4 5 6 7  8 9
交换次数 0 
此时交换此时为零,排序完成。结果为0 1 2 3 4 5 6 7 8 9

代码:

c 复制代码
#include <stdio.h>
#include <string.h>

char a[10]={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
char temp;//临时存放
int num; //每循环交换次数
char flag=1;//开始交换标志位

int main()
{

    while(flag)
    {
        for(char i=0;i<9;i++) 
        {
            if(a[i]>a[i+1])
            {
                temp = a[i+1];
                a[i+1]=a[i];
                a[i]=temp;
                num++;  //记录每次循环交换的次数
            }
        }
         //如果交换次数为零,说明交换完成
         //退出交换
        if(num==0)
        {
            flag = 0;
        }
        else //每次循环完成将num清零。
        {
            num=0;
        }
    }

    //打印最终的结果。
    for(char i=0;i<10;i++)
    {
        printf("%d\r\n",a[i]);
    }
    return 0;
}

选择排序

依次比较后面的数据,将数据小的放到前面。

c 复制代码
#include <stdio.h>
#include <string.h>

char a[10]={9,5,1,2,4,7,6,8,3,0}; //要进行排序的数据
char i,j,n;
char temp;
int main()
{
    char *p =&temp;

    //获取数据的个数
    n=sizeof(a)/sizeof(char);
    printf("n=%d\r\n",n);

    //进行交换
    for (i=0;i<n;i++)
    {
        j=i+1;
        for(j;j<n;j++)
        {
            if(a[i]>a[j]) 
            {
                temp=a[j];
                a[j]=a[i];
                a[i]=temp;
            }
        }
    }
    
    //打印最终的结果。
    for(char y=0;y<10;y++)
    {
        printf("%d\r\n",a[y]);
    }
    return 0;
}
相关推荐
superman超哥4 分钟前
仓颉借用检查器工作原理深度解析
c语言·开发语言·c++·python·仓颉
s09071365 分钟前
常用FPGA实现的图像处理算法
图像处理·算法·fpga开发
鱼鱼块8 分钟前
二叉搜索树:让数据在有序中生长的智慧之树
javascript·数据结构·面试
core51212 分钟前
SVM (支持向量机):寻找最完美的“分界线”
算法·机器学习·支持向量机·svm
TG:@yunlaoda360 云老大34 分钟前
华为云国际站代理商的DDM支持哪些拆分算法?
数据库·算法·华为云
qq_430855881 小时前
线代第二章矩阵第五、六、七节矩阵的转置、方阵的行列式、方阵的伴随矩阵
线性代数·算法·矩阵
jianfeng_zhu1 小时前
二叉树的中序线索化,并通过线索化后遍历二叉树
数据结构·链表
C雨后彩虹1 小时前
5G网络建设
java·数据结构·算法·华为·面试
ComputerInBook1 小时前
C++编程语言:标准库:第43章——C语言标准库(Bjarne Stroustrup)
c语言·c++·c语言标准库
机器学习之心1 小时前
最小二乘支持向量机(LSSVM)结合遗传算法(GA)解决单目标优化问题,MATLAB代码
算法·支持向量机·matlab·单目标优化问题