【问题标题】:C simple sorting algorithm to changeC简单排序算法改变
【发布时间】:2021-03-19 12:44:43
【问题描述】:

如何更改以下排序算法以对单个数组 arr[] 进行操作?现在,我必须将元素从一个数组 arr[] 转移到 res[]。如何对 arr[] 执行所有操作? 这是我的代码:

void main(){
    
    int arr [] = {1, 14, 5, 18, 3, 1};
    int res [] = {0, 0, 0, 0, 0, 0};
    
    int x = 0;
    int y = 0;
    
    for(int i = 0; i < 6; i++) {
              x = 0;
          
        for(int k = 0; k < 6; k++){
                       
            if(arr[k] > x){
            x = arr[k];
            y = k;
            }
         }    
      arr[y] = 0;
      res[5 - i] = x;
    
    }
   
     for (int z = 0; z < 6; z++){
       printf("%d ", res[z]);
    }
 }

【问题讨论】:

  • 提示:不要只是将代码 bash 到 main编写函数
  • 您是否要反向排序为res?您始终可以通过反转排序比较来反转排序。
  • 一个典型的 swap 被排序数组的元素。
  • 搜索“就地排序算法”
  • 主要是一种选择排序,网上有 数千 个示例演示了就地算法的工作原理。

标签: arrays c sorting


【解决方案1】:

只需通过一一检查彻底交换数组中错误定位的元素。这称为冒泡排序。还有另一种排序算法,您可以在线搜索或查看 visualgo 以了解动画过程。

void main(){
    
    int arr [] = {1, 14, 5, 18, 3, 1};    
    
    // This applies bubble sort
    for(int i = 0; i < 6; i++) {
        for(int k = 0; k < 6; k++){
            // Swap elements in an array  
            if(arr[i] > arr[k]){
                int x = arr[k];
                arr[k] = arr[i];
                arr[i] = x;
            }
         }        
    }
   
     for (int z = 0; z < 6; z++){
       printf("%d ", res[z]);
    }
 }

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2013-01-23
    • 2017-07-28
    • 2013-01-12
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多