c - 排序数组在 ANSI C 中不起作用

标签 c ansi-c

我正在用 ANSI C 编写代码,该代码必须完成一个简单的任务:

  • 对数组进行排序
  • 在数组中搜索元素
  • 如果找到则返回元素位置
  • 否则返回-1

我这样定义我的函数:

int search_sorted(int *array, int dimensione, int elemento) {
    int i;
    for(i=0;i<dimensione;i++){
        //fill the array with random numbers
        *(array+i)=((int)(rand()%RANDOM_MAX));
    }
    sort(array,dimensione);
    //this should actually sort the array?
    for(i=0;i<dimensione;i++){
        printf(" posizione %d\t -\t %d\n",i+1,array[i]);
        //print the array...
    }    
    for(i=0;i<dimensione;i++){
        if(elemento>array[i]){
            return -1;
        } else if(array[i] == elemento) {
        return ++i;
        }    
    }
    return -1;
}

//sorting function
int sort (int *array,int dim){
int i, temp;
for (i=0;i<(dim-1);i++){
    if(array[i]>array[i+1]){
            temp=array[i+1];
            array[i+1]=array[i];
            array[i]=temp;
    }
}

}

问题是排序根本不适用,而且我看不出它不适用的原因...我 100% 确定我传递了正确的元素(没有编译错误或任何错误) ...)

知道为什么它不起作用,以及如何解决这个问题吗?

最佳答案

您正在尝试实现冒泡排序算法。您的实现不正确。 您的循环只是将最大的元素放在最后一个位置。

您需要使用另一个循环来嵌套此循环。

for(j=0;j<dim-1;j++)
for (i=0;i<(dim-1-j);i++){
    if(array[i]>array[i+1]){
            temp=array[i+1];
            array[i+1]=array[i];
            array[i]=temp;
    }

关于c - 排序数组在 ANSI C 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670175/

相关文章:

c fwrite() 写入数据只对结构变量之一?

c - 直接将左移运算的结果赋值给一个变量和C中的左移赋值运算有什么区别?

C、杀死所有进程

c - 通过数组的最有效方法?

c - 为什么 ANSI C 没有 namespace ?

c - 将输入文本中的十六进制值保存到字符串 var,反之亦然 ANSI C

c - Kotlin/Native - Windows 上的 cinterop

c - 增量关于TCC,GCC

c - C语言中只读取一行txt

c - 是否可以在 ANSI C 中的一维数组中包含多个字符串?