ZhengWei 发表于 2020-12-28 17:58:34

C语言选择排序的解法

C语言选择排序的解法

小甲鱼的铁粉 发表于 2020-12-28 18:14:25

1 #include <stdio.h>
2
3 // 选择排序:相邻两个元素进行比较,把大的元素的下标记录下来,一轮完整的比较之后,若最大值的下标不是len-i,则两个元素交换位置
4 void select_sort(int arr[],int len)
5 {
6   for(int i=0; i<len; i++) // 总共要找len-1次最大值,每次找最大值的区间
7   {
8         int index_nmax = 0;
9         for(int j=1; j<len-i; j++) // 因为假设了0下标就是最大值,所以循环可以从1开始
10         {
11             if(arr > arr)
12             {
13               index_nmax = j;
14             }
15         }      
16         if(index_nmax != len-i-1) // 避免无意义的位置交换
17         {
18             int tmp = arr;
19             arr = arr;
20             arr = tmp;
21         }
22   }   
23 }
24
来自https://www.cnblogs.com/usingnamespace-caoliu/p/9428115.html

大聪明14 发表于 2020-12-29 00:41:40

# include <stdio.h>
int main(void)
{
    int i, j;//循环变量
    int MinIndex;//保存最小的值的下标
    int buf;//互换数据时的临时变量
    int a[] = {5, 5, 3, 7, 4, 2, 5, 4, 9, 1, 8, 6};
    int n = sizeof(a) / sizeof(a);//存放数组a中元素的个数
    for (i=0; i<n-1; ++i)//n个数比较n-1轮
    {
      MinIndex = i;
      for (j=i+1; j<n; ++j)//每轮比较n-1-i次, 找本轮最小数的下标
      {
            if (a > a)
            {
                MinIndex = j;//保存小的数的下标
            }
      }
      if (MinIndex != i)/*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/
      {
            buf = a;
            a = a;
            a = buf;
      }
    }
    printf("最终排序结果为:\n");
    for (i=0; i<12; ++i)
    {
      printf("%d ", a);
    }
    printf("\n");
    return 0;
}
页: [1]
查看完整版本: C语言选择排序的解法