标题: 分享一个C语言升序排序算法 [打印本页]

作者: 一入极客深似海    时间: 2021-8-2 19:07
标题: 分享一个C语言升序排序算法
目的,用最少的代码,干最大的事,欢迎在评论区晒出自己的最少代码量的排序程序
  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. //打印值看一下了
复制代码



作者: 温xyz    时间: 2021-8-2 19:33
谢谢分享,这代码很实用!
作者: 温xyz    时间: 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++) 。
作者: 一入极客深似海    时间: 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])是获取数组中一位的字节长度。用总字节长度/一位字节长度。得出的结果就是。数组的长度。
作者: 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 };  //要排序的数组
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 ;
                }
    }
}

作者: 洛伦兹力量    时间: 2021-8-3 10:50
挺好的,判断个数的用关键字sizeof给简化,第二个for中的可以这样写   j < sizeof(arr) / sizeof(arr[0]) - i-1
最大的数已经到最后一个位置上,就可以减少程序运行的时间了
作者: 温xyz    时间: 2021-8-3 12:00
一入极客深似海 发表于 2021-8-3 06:10
sizeof(arr)是获取数组的总字节长度,sizeof(arr[0])是获取数组中一位的字节长度。用总字节长度/一位字节 ...

谢谢解答,明白了。
作者: 一入极客深似海    时间: 2021-8-4 16:36
洛伦兹力量 发表于 2021-8-3 10:50
挺好的,判断个数的用关键字sizeof给简化,第二个for中的可以这样写   j < sizeof(arr) / sizeof(arr[0]) - ...

对,是的,可以减一次循环
作者: 一入极客深似海    时间: 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就不需要定义了吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1