今天我尝试制作一个程序(算法),它在数组中搜索下一个大于找到的预览数字的数字并打印它。
仅当下一个数字不小于该数字时才需要打印该数字。
拳头示例: 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/