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;
}
相关推荐
NAGNIP5 小时前
一文搞懂树模型与集成模型
算法·面试
NAGNIP5 小时前
万字长文!一文搞懂监督学习中的分类模型!
算法·面试
技术狂人1685 小时前
工业大模型工程化部署实战!4 卡 L40S 高可用集群(动态资源调度 + 监控告警 + 国产化适配)
人工智能·算法·面试·职场和发展·vllm
D_FW5 小时前
数据结构第六章:图
数据结构·算法
你怎么知道我是队长5 小时前
C语言---头文件
c语言·开发语言
a程序小傲6 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
自学不成才6 小时前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
3有青年6 小时前
nios ii 中 ‘ALT_CPU_FREQ‘ could not be resolved的分析和解决办法
c语言·fpga开发
June`6 小时前
全排列与子集算法精解
算法·leetcode·深度优先