c - 排序数组,输出错误

标签 c arrays

今天我尝试制作一个程序(算法),它在数组中搜索下一个大于找到的预览数字的数字并打印它。

仅当下一个数字不小于该数字时才需要打印该数字。

拳头示例: 4,2,3,9,4,6,5:输出应为:2,3,4,5。

第二个例子: 2,3,6,4,5,1 输出应该是 1。

第三个例子: 1,9,8,7,6,5 输出应该是 1,5。

例如,如果数组有以下元素1,4,2,3,6,4,5,8,6,输出应该是:

  1 2 3 4 5 6

如果数组有以下元素1,4,2,3,输出应该是:

1,2,3

程序如下:

#include <stdio.h>

int sortArr(int* array, int n, int next){
    int i,min = array[0];
    int lang;

    if(next==0){
        for (i=0;i<n;i++){
            if(array[i]<min){
                min=array[i];
            }
        }
    }

    if(next != 0){
        lang=next;
        while(lang==next){
            for (i=0;i<n;i++){
                if(array[i]<min){
                    min=array[i];
                }
            }

            lang++;

            if(lang== next){
                break;
            }
        }
        min=lang;
    }

    return min;
}

int main(void){
    int a[] = {1,4,2,3,6,4,5,8,6};
    int i,l = sizeof a / sizeof a[0];
    int next = 0;
    int min = sortArr(a,l,next);

    for(i=0;i<l;i++){
        if(min < a[i]){
            if(min < a[i]){
                min = sortArr(a,l,next);
                printf("%d ",min);
            }
            next++;
        }
    }
    printf("\n");
    return 0;
}

我认为,输出与这样一个事实有关,即只有当第一个元素是整个数组元素中最小的时,程序才能运行。

编辑: 我也尝试了以下方法:

#include <stdio.h>

int sortArr(int* array, int n, int next){
    int i,min = array[0];
    int lang;

    if(next==0){
        for (i=0;i<n;i++){
            if(array[i]<min){
                min=array[i];
            }
        }
    }

    if(next != 0){
        lang=next;
        while(lang==next){
            for (i=0;i<n;i++){
                if(array[i]<min){
                    min=array[i];
                }
            }

            lang++;

            if(lang== next){
                break;
            }
        }
        min=lang;
    }

    return min;
}

int main(void){
    int a[] = {2,1,3,4};
    /*int a[] = {9,4,2,3,6,4,5,8,6};*/
    int i,l = sizeof a / sizeof a[0];
    int next = 0;
    int min = sortArr(a,l,next);

    for(i=0;i<l;i++){
        if(min == a[i]){
            continue;
        }

        if(min < a[i]){
            next++;
            min = sortArr(a,l,next);

        }
        printf("%d ",min);
    }
    printf("\n");
    return 0;
}

输出应该是2,3,4,但我得到的是2,2,3,4

最佳答案

这是一个简单的 C 代码,可以完成所需的操作。逻辑很简单。

#include<stdio.h>
#include<stdlib.h>
int is_valid(int,int [],int);
void main()
{
 int a[]={1,4,2,3,6,4,5,8,6 };
 int i;
 for(i=0;i<sizeof(a)/sizeof(a[0])-1;++i)
 {
   if(is_valid(i,a,sizeof(a)/sizeof(a[0])))
    printf("%d ",a[i]);
 }
 printf("%d ",a[i]);
}
int is_valid(int i,int a[],int l)
{
 int j;

 for(j=i+1;j<l;++j)
  if(a[j]>=a[i])
   continue;
  else return 0;
 return 1;
}

关于c - 排序数组,输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32295236/

相关文章:

c - execvp 的错误地址错误

javascript - 将对象数组转换为对象

javascript - 在将元素推送到 HTML ID 时更新实时 JavaScript 数组

C 多管

c - 我的代码有什么错误吗?我是新手

arrays - 如何从 Scala 列表或数组中随机采样?

arrays - 控制 PowerShell 中函数返回的类型

arrays - 编译错误: ByRef arugment type mismatch: How to call a value in an array

c++ - "save_and_cli(flag)"是如何工作的?

c - 如何仅用一个可迭代的矩阵相乘