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;
}
相关推荐
yzx99101310 分钟前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
iCxhust12 分钟前
Prj10--8088单板机C语言8259测试(1)
c语言·开发语言
亮亮爱刷题13 分钟前
算法练习-回溯
算法
眼镜哥(with glasses)1 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯
apocelipes5 小时前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
int型码农6 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT6 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面6 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked936 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,6 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法