我需要在伪代码和java中实现以下内容。
输入:整数数组
输出:重新排列数组以具有以下内容:
算法没有空间要求,只是问题在O(n)时间内得到解决。
因此,我认为泡泡排序最好。
在这种情况下,交换算法不是最好的选择,我想获得一些可以在这里实现的其他方法的反馈。
谢谢!
答案 0 :(得分:4)
创建一个包含空格的数组以适合所有元素。如果数字是< x然后将它放在数组的开头,如果number是> x然后把它放在最后。如果number等于x,则忽略它并继续前进。最后,用等于x的值填充剩余的点。
答案 1 :(得分:1)
java.util.array做了你说的话,但是我可能会错过一个关键的实现细节:就是这样:
int[] numbers = {4, 9, 1, 3, 2, 8, 7, 0, 6, 5};
System.out.println(Arrays.toString(numbers));
java.util.Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
输出:
Before sorting: [4, 9, 1, 3, 2, 8, 7, 0, 6, 5]
After sorting: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
使用整数4作为参考点,满足您列出的所有条件。本机排序算法会更快。但如果你需要掌控,请尝试第一个答案
得到4的所有值,只需找到4的索引,让我们说i [nth]并返回低于i [nth]的所有索引。得到4的数字,找到4的索引,即i [nth]并得到高于i [nth]的索引,而I [nth]小于[从零开始的数组]的数组的长度
答案 2 :(得分:0)
考虑到OP的小数据集,冒泡排序可行,但“......当n很大时,冒泡排序不是一种实用的排序算法。” (见bubblesort)。一个有效的算法是quicksort:
...算法采用O(n log n)比较来排序n个项目。
以下QuickSort实现是我从Ideone获得的一个分支,并修改为包含OP数组和代码在数组的左值上的代码,如下所示: / p>
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int b[] = { 4, 3, 9, 2, 7, 6, 5 };
sort( b, 0, b.length - 1 );
System.out.println( Arrays.toString( b ) );
}
static void sort(int a[], int left, int right) {
if (left < right){
int i=left, j=right, tmp;
int v = a[left]; //pivot
do {
while( a[i] < v)
i++;
while(a[j]>v)
j--;
if( i <= j){
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
} while( i <= j );
if( left < j ) sort( a, left, j );
if( i < right ) sort(a,i,right);
}
}
}
直播code
注意:此解决方案通过使用sort()调用本身取决于递归,具体取决于左和 i 的值,而 j 和正确。
或者,您可以像@Maxwell一样建议使用Java的本机sort(),因为它是QuickSort的快速实现(参见here)。