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;
}
相关推荐
小江的记录本16 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov17 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫17 小时前
特征工程处理
人工智能·算法·机器学习
z落落18 小时前
C#参数区别
java·算法·c#
c2385618 小时前
vector(下)
数据结构·算法
z落落18 小时前
C# 冒泡排序+选择排序 + Array.Sort 自定义排序
数据结构·算法
wyy1851007372818 小时前
双路并行:一套匹配算法如何解决中文制单的两大核心难题
算法·ai·crm·crm系统
s_w.h19 小时前
【 linux 】文件系统
linux·运维·服务器·算法·bash
无限进步_19 小时前
【C++】weak_ptr、循环引用与线程安全
开发语言·数据结构·c++·算法·安全
罗超驿19 小时前
9.LeetCode 209. 长度最小的子数组 | 滑动窗口专题详解
java·算法·leetcode·面试