【问题标题】:Boubble sorting with arrays with C用C用数组进行冒泡排序
【发布时间】:2015-12-11 21:20:33
【问题描述】:
    #include <stdio.h>

int main(){

  void sorting(){

    int a[4];
  a[0]=1; 
  a[1]=6;
  a[2]=15; 
  a[3]=3;
  a[4]=19; 
  int size = 4; 

    int t =1; 
  if (size ==0) return; // ie if you reach to the end stop


  int i; 
  for (i=0;i<size-1;i++){ 

    if(a[i+1] >a[i]) { //if the +1 element is bigger than before it do the swap

         int j;
         j= a[i+1]; 
        a[i+1]=a[i]; //swap
         a[i] = j;    //swap 

       }
  }
    sorting(*a,size - 1);//recursion 

void print_int() {
  int i; // Loop counter 

  for (i = 0; i < 4; i++) {
    printf("%d\n", a[i]);
  }}

}  

编译正常,但是当我尝试运行该文件时,什么都没有出现?我的意图是创建一个数组对它们进行排序然后显示它们。

另外,递归发生的代码“sorting(*a,size - 1);//” 如果我尝试将 *a 替换为 a[] 则会发生错误。这是为什么? 错误是“']'标记之前的错误预期表达式”!

谢谢。

【问题讨论】:

  • 运行文件?你在编译并执行它吗?
  • 这里的问题太多了:越界a[4],没有参数的子函数永远不会被调用......请先阅读一些关于C语法的书。

标签: c arrays sorting recursion


【解决方案1】:
int a[4];

但您访问的a[4]=19; 索引4 超出范围。您可以访问最高索引3

我认为函数 void sorting() 应该在 main 之外定义。嵌套函数是 GCC 中的 GNU 扩展。

【讨论】:

    【解决方案2】:

    您的代码有很多问题。这是一个有效的数组排序:

    #include <stdio.h>
    
    void bubble_sort(int *array, int length){
        int i,j, k, temp;
    
        for (i = 0 ; i < length-1; i++){
            for (k = 0 ; k < length-i-1; k++){
              if (array[k] > array[k+1]){
                temp = array[k];
                array[k]   = array[k+1];
                array[k+1] = temp;
              }
            }
        }
    
        printf("The sorted Array List:\n\n");
    
        for ( j = 0 ; j < length ; j++ ){
            printf("%d  ", array[j]);
        }
    }
    
    int main(void){
        int array[] = {1,6,15,3,19};
        int length = sizeof array / sizeof array[0];
    
        bubble_sort(array, length);
        printf("\n");
    
        return 0;
    }
    

    您应该阅读函数声明和定义。

    关于数组你应该知道,如果你声明:

    int array[4];
    

    您的工作数组是从 03,而不是从 04。 看看以下内容:

    int main(void){
        int array[] = {1,6,15,3,19};
        int size = 5;
        int i;
    
        for(i=0;i<size;i++){
            printf("%d ",array[i]);
        }
    
        return 0;
    }
    

    我有 size=5 而不是 size=4 - 就像你尝试的那样。您应该注意 Array 元素的数量。

    【讨论】:

      【解决方案3】:

      除了其他人发现的所有问题之外,您必须重复执行for 循环,直到不再进行任何交换,这是冒泡的标准方式。当您使用递归时,在递归调用的函数中声明要排序的数组(及其大小)当然是无稽之谈。

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 2020-05-17
        • 2010-12-23
        • 2013-06-10
        • 2020-07-17
        • 1970-01-01
        • 2018-09-22
        • 2021-09-16
        • 1970-01-01
        相关资源
        最近更新 更多