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;
}
相关推荐
cpp_250122 分钟前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
uesowys31 分钟前
Apache Spark算法开发指导-Factorization machines classifier
人工智能·算法
季明洵1 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
shandianchengzi1 小时前
【小白向】错位排列|图文解释公考常见题目错位排列的递推式Dn=(n-1)(Dn-2+Dn-1)推导方式
笔记·算法·公考·递推·排列·考公
I_LPL1 小时前
day26 代码随想录算法训练营 回溯专题5
算法·回溯·hot100·求职面试·n皇后·解数独
Yeats_Liao1 小时前
评估体系构建:基于自动化指标与人工打分的双重验证
运维·人工智能·深度学习·算法·机器学习·自动化
only-qi1 小时前
leetcode19. 删除链表的倒数第N个节点
数据结构·链表
cpp_25011 小时前
P9586 「MXOI Round 2」游戏
数据结构·c++·算法·题解·洛谷
浅念-1 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒1 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习