我正在尝试按递增和递减顺序组织数组,而不会改变其原始位置,也不会创建新的。关键是:我只需要使用两个指针就可以了。由于它们的增加和减少顺序都是模拟的,所以我专注于增加的功能。
我的算法看起来像插入排序类型。但是,不是通过所有阵列,然后向后走,以确保外观是正常的,我编码,因为它向前迈出了一步,然后看看后面的所有。如果前一个元素安装在正确的位置,那么它不必检查其他元素,然后它打破了花边:
有(; Z大于0; Z - )
我不太确定会发生什么事。例如,“ - 8 10 2 0”的输出为:
在数组中包含整数: -8 10 2 0
数组:原创。
整数:-8 ||地址:0x7ffc88143d20
整数:10 ||地址:0x7ffc88143d24
整数:2 ||地址:0x7ffc88143d28
整数:0 ||地址:0x7ffc88143d2c
增加订单:
整数:2 || last_shown:-8
整数:0 || last_shown:2
整数:-2011939296 || last_shown:0
#include <stdio.h>
#define N 4
void get_data(int *array)
{
int i;
printf("Include integers in the array:\n");
for (i = 0; i < N; i++)
{
scanf("%d", &array[i]);
}
}
void shows_original(int *array)
{
int i;
printf("array: original.\n");
for (i = 0; i < N; i++)
printf("Integer: %d || Address: %p\n", array[i], &array[i]);
printf("\n");
}
void increasing_order(int* DataArray)
{
int i, z;
int *current_ptr = DataArray, *last_shown = DataArray;
printf("Increasing order:\n");
for (i = 0; i < N; i++)
{
z = i;
if (DataArray[i + 1] >= DataArray[i] && *current_ptr >= *last_shown)
{
current_ptr = &DataArray[i];
for (; z > 0; z--)
{
if (*current_ptr >= DataArray[z - 1])
{
if (&DataArray[z - 1] == last_shown)
continue;
else
{
last_shown = current_ptr;
current_ptr = &DataArray[z - 1];
}
}
else
break;
}
last_shown = current_ptr;
}
else if (DataArray[i + 1] < DataArray[i] && *current_ptr >= *last_shown)
{
current_ptr = &DataArray[i + 1];
for (z; z > 0; z--)
{
if (*current_ptr >= DataArray[z - 1])
{
if (&DataArray[z - 1] == last_shown)
continue;
else
{
last_shown = current_ptr;
current_ptr = &DataArray[z - 1];
}
}
else
break;
}
printf("Integer: %d||last_shown: %d\n", *current_ptr,
*last_shown);
last_shown = current_ptr;
}
}
printf("\n");
}
int main()
{
int DataArray[N];
get_data(DataArray);
shows_original(DataArray);
increasing_order(DataArray);
/*decreasing_order(DataArray);*/
printf("\n");
return 0;
}
任何人都可以帮助我吗?欢呼声。
答案 0 :(得分:0)
您如何看待这个版本?
int *next=DataArray;
int *end=DataArray+N;
for(pt=DataArray; pt<end; pt++) {
if(*pt<*next) next=pt; // find smallest
}
for(last=next, next=null; last!=null; last=next, next=null ) {
for(pt=DataArray; pt<end; pt++) {
if(*pt==*last) // print all current smallest
printf("%d: %d\n", pt-DataArray, *pt);
else if(*pt>*last && (next==null || *pt<*next))
next=pt; // find next greater smallest
}
}