找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2395|回复: 8
打印 上一主题 下一主题
收起左侧

分享一个C语言升序排序算法

[复制链接]
跳转到指定楼层
楼主
ID:632160 发表于 2021-8-2 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的,用最少的代码,干最大的事,欢迎在评论区晒出自己的最少代码量的排序程序
  1. int temp = 0, max = 0;  //定义两个中间变量
  2.         int arr[] = { 0,5,3,9,1,2,4,6,7,8,978,45,34,22 };  //要排序的数组
  3.         for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) //外循环次数要小于数组长度
  4.         {
  5.                 for (int j = 0; j < (sizeof(arr) / sizeof(arr[0])) - i; j++)  //
  6.                 {
  7.                         if (arr[j] >= max)    //找到每次循环的中的最大数
  8.                         {
  9.                                 max = arr[j];     //记录最大数
  10.                                 temp = j;         //记录产生最大数,位于数组的位置
  11.                         }
  12.                 }
  13.                 max = arr[sizeof(arr) / sizeof(arr[0]) - i - 1];  //将数组最后一个值,临时赋值给
  14.                 arr[sizeof(arr) / sizeof(arr[0]) - i - 1] = arr[temp];  // 让数组最后一个值,等于在内循环中找到的最大值
  15.                 arr[temp] = max;    //在内循环中找到的最大值的位置等于 MAX

  16.                 max = 0;  //让 max等于0,进入下一次的内循环
  17.         }
  18. //打印值看一下了
复制代码


评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:8222 发表于 2021-8-2 19:33 | 只看该作者
谢谢分享,这代码很实用!
回复

使用道具 举报

板凳
ID:8222 发表于 2021-8-2 19:40 | 只看该作者
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) //外循环次数要小于数组长度
请赐教sizeof(arr[0])什么意思?而不是 for (int i = 0; i < sizeof(arr) ; i++) 。
回复

使用道具 举报

地板
ID:632160 发表于 2021-8-3 06:10 | 只看该作者
温xyz 发表于 2021-8-2 19:40
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) //外循环次数要小于数组长度
请赐教sizeof(arr ...

sizeof(arr)是获取数组的总字节长度,sizeof(arr[0])是获取数组中一位的字节长度。用总字节长度/一位字节长度。得出的结果就是。数组的长度。
回复

使用道具 举报

5#
ID:386001 发表于 2021-8-3 09:17 | 只看该作者
int temp = 0, max = 0;  //定义两个中间变量
int arr[] = { 0,5,3,9,1,2,4,6,7,8,978,45,34,22 };  //要排序的数组
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) //外循环次数要小于数组长度
{
        for (int j = 0; j < (sizeof(arr) / sizeof(arr[0])) - i; j++)  //
        {
                if (arr[j] > arr[j+1] )    //相邻数两两对比,如前边大于后边,则交换
                {
                        temp = arr[j];  
                        arr[j]= arr[j+1];  
                        arr[j+1] = temp ;
                }
    }
}
回复

使用道具 举报

6#
ID:936280 发表于 2021-8-3 10:50 | 只看该作者
挺好的,判断个数的用关键字sizeof给简化,第二个for中的可以这样写   j < sizeof(arr) / sizeof(arr[0]) - i-1
最大的数已经到最后一个位置上,就可以减少程序运行的时间了
回复

使用道具 举报

7#
ID:8222 发表于 2021-8-3 12:00 | 只看该作者
一入极客深似海 发表于 2021-8-3 06:10
sizeof(arr)是获取数组的总字节长度,sizeof(arr[0])是获取数组中一位的字节长度。用总字节长度/一位字节 ...

谢谢解答,明白了。
回复

使用道具 举报

8#
ID:632160 发表于 2021-8-4 16:36 | 只看该作者
洛伦兹力量 发表于 2021-8-3 10:50
挺好的,判断个数的用关键字sizeof给简化,第二个for中的可以这样写   j < sizeof(arr) / sizeof(arr[0]) - ...

对,是的,可以减一次循环
回复

使用道具 举报

9#
ID:632160 发表于 2021-8-4 16:37 | 只看该作者
sustlixin 发表于 2021-8-3 09:17
int temp = 0, max = 0;  //定义两个中间变量
int arr[] = { 0,5,3,9,1,2,4,6,7,8,978,45,34,22 };  //要 ...

max就不需要定义了吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表