Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 无数组排序_Algorithm_Sorting - Fatal编程技术网

Algorithm 无数组排序

Algorithm 无数组排序,algorithm,sorting,Algorithm,Sorting,假设你有十个不同的变量和十进制值,你必须从最低到最高排序。我熟悉使用不同编程语言的不同排序算法,但在这种情况下,我必须在终端用户应用程序中构建算法,只允许输入一些特殊的构造:它允许使用“for”、“while”、“if”,但与数组无关,这意味着它无法处理类似于[I]的结构“a”是一个数组。请问,有人能给我一个线索吗?非常感谢!你是说这样的东西吗 c++代码: void sort_4(int *a1, int *a2, int *a3, int *a4) { if (a1 == NULL) r

假设你有十个不同的变量和十进制值,你必须从最低到最高排序。我熟悉使用不同编程语言的不同排序算法,但在这种情况下,我必须在终端用户应用程序中构建算法,只允许输入一些特殊的构造:它允许使用“for”、“while”、“if”,但与数组无关,这意味着它无法处理类似于[I]的结构“a”是一个数组。请问,有人能给我一个线索吗?非常感谢!

你是说这样的东西吗

c++代码:

void sort_4(int *a1, int *a2, int *a3, int *a4)
{
  if (a1 == NULL) return;
  if (a2 == NULL) return;
  if (*a2 < *a1) swap(*a1, *a2);
  sort_5(a1, NULL, NULL, NULL);
  if (a3 == NULL) return;
  if (*a2 < *a3) swap(*a2, *a3);
  sort_5(a1, a2, NULL, NULL);
  if (a4 == NULL) return;
  if (*a4 < *a3) swap(*a3, *a4);
  sort_5(a1, a2, a3, NULL);
}
void排序_4(int*a1、int*a2、int*a3、int*a4)
{
如果(a1==NULL)返回;
如果(a2==NULL)返回;
如果(*a2<*a1)互换(*a1,*a2);
排序_5(a1,NULL,NULL,NULL);
如果(a3==NULL)返回;
如果(*a2<*a3)互换(*a2,*a3);
排序_5(a1、a2、NULL、NULL);
如果(a4==NULL)返回;
如果(*a4<*a3)互换(*a3,*a4);
排序_5(a1、a2、a3、空);
}

您可以通过复制粘贴或代码生成脚本将其扩展为10个元素。

您可以硬编码冒泡排序。例如,假设您有10个变量,
a、b、c、d、e、f、g、h、i、j

for (int x = 0; x < 9; ++x)
{
    if (a > b) swap(a,b);
    if (b > c) swap(b,c);
    if (c > d) swap(c,d);
    if (d > e) swap(d,e);
    if (e > f) swap(e,f);
    if (f > g) swap(f,g);
    if (g > h) swap(g,h);
    if (h > i) swap(h,i);
    if (i > j) swap(i,j);
}
for(int x=0;x<9;++x)
{
如果(a>b)互换(a,b);
如果(b>c)互换(b,c);
如果(c>d)互换(c,d);
如果(d>e)互换(d,e);
如果(e>f)互换(e,f);
如果(f>g)交换(f,g);
如果(g>h)交换(g,h);
如果(h>i)交换(h,i);
如果(i>j)交换(i,j);
}
这不是非常有效,但您不会注意到只有10个左右项的UI应用程序的低效。您可以通过嵌套条件使其稍微更有效:

    if (x < 9)
    {
       if (a > b) swap(a,b);
       if (x < 8)
       {
           if (b > c) swap(b,c);
           if (x < 7)
           {
               ....
if(x<9)
{
如果(a>b)互换(a,b);
if(x<8)
{
如果(b>c)互换(b,c);
if(x<7)
{
....

但是这会很快变得很难处理,而且它给你带来的小效率也不会因为这么小的列表而被注意到。

你的问题还不清楚。首先,如果你不能在
a
上写,你就不能进行就地排序。你可以复制它,对它进行排序并返回该数组。或者如果你必须找到min/max元素作为输入i如果提供给您,请使用
heap
以便您尝试使用不支持数组的语言进行排序?这就解决了您的问题。请使用数字扩展4。谢谢。是的,问题是我必须处理一个允许您创建脚本的应用程序,但这些脚本没有提供您可以使用的常用元素/指令当你使用完整的语言时。从这个意义上说,这就像我使用了一种不支持数组的语言。非常感谢@KarthikeyanGopall,我是这么想的,但在我的例子中,这是一个10个变量的问题,所以写代码可能会很痛苦。我只是想知道是否有可能以更有效的方式处理它。谢谢@Ke Yang,but在这种情况下,我无法调用方法,没有递归方式。那么您可能需要使用大量代码来实现排序。例如,使用气泡排序对10个元素进行大约50次比较。您可以编写一个脚本来生成代码。