按降序对整数数组 X=(x1,x2,..,xn) 进行排序。按照元素最初的顺序打印原始数组元素的索引。打印数组中最大和最小元素的索引。这是代码:由于某种原因,如果您在排序之前查找数组的最大和最小元素,那么在它之后,数组将被第一个元素填充。以及如何以原始顺序显示索引?先感谢您
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
void shellsort(int* a, int leng);
int main()
{
int n, i, j = 0;
printf("Enter size:\n");
scanf_s("%d", &n);
printf("Enter elements: \n");
int* mas = new int[n];
for (i = 0; i < n; i++)
{
scanf_s("%d", &mas[i]);
}
int max = mas[0];
int d = 0;
for (i = 0; i < n; i++)
{
if (max < mas[i])
{
mas[i] = max;
d = i;
}
}
printf("Max index is: %d\n", d);
int min = mas[0];
int e = 0;
for (i = 0; i < n; i++)
{
if (min > mas[i])
{
mas[i] = min;
e = i;
}
}
printf("Min index is: %d\n", e);
shellsort(mas, n);
printf("\n");
delete[]mas;
}
void shellsort(int* a, int leng)
{
int k = 0, i, j, p, temp, step;
int* gap = new int[leng];
gap[0] = leng / 2;
while (gap[k] > 1)
{
k++;
gap[k] = gap[k - 1] / 2;
}
for (i = 0; i <= k; i++)
{
step = gap[i];
for (j = step; j < leng; j++)
{
temp = a[j];
p = j - step;
while (p >= 0 && temp > a[p])
{
a[p + step] = a[p];
p = p - step;
}
a[p + step] = temp;
}
}
printf("\n");
for (i = 0; i < leng; i++)
{
printf("%d", a[i]);
}
}
我希望我正确理解了这种情况。这个想法是将原始索引保持在与元素相同的结构中。然后,在排序时,索引将按正确的顺序排列。
https://ideone.com/WFJCrq