【发布时间】:2018-09-02 22:52:12
【问题描述】:
给定一个大小为n 的数组,我想对元素进行排列,以便输出返回该数组首先包含所有负元素,然后是零,最后是所有正元素,而不对数组进行排序。也就是说,我想将数组分成 3 部分,得到复杂度 O(n) 并且不使用额外的数组。
下面的代码是一个尝试,但它对数组进行排序,这不是我想要的,因为即使优化它我也只能达到时间复杂度O(nlogn)。
using System;
public class sort
{
public static void Main(string[] args)
{
int n, k, t;
Console.WriteLine("Enter the size of array");
n = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[n];
for (k = 0; k < n; k++)
{
Console.Write("\nEnter your number:\t");
arr[k] = Convert.ToInt32(Console.ReadLine());
}
for (int j = 0; j <= n- 2; j++)
{
for (int i = 0; i <= n - 2; i++)
{
if (arr[i] > arr[i + 1])
{
t = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = t;
}
}
}
Console.WriteLine("The output array :");
foreach (int aray in arr)
Console.Write(aray + " ");
Console.ReadLine();
}
}
提前感谢您的建议。
【问题讨论】:
-
这是 Dijkstra 的做法:en.m.wikipedia.org/wiki/Dutch_national_flag_problem
-
这是一个很好的提示。谢谢
标签: arrays algorithm dynamic-programming partitioning