Java 创建对数组排序的方法
未排序数组和整数k,创建一个方法,重新排列数组中的元素,使所有小于或等于k的元素位于任何大于k的元素之前 这是我的代码,它不起作用Java 创建对数组排序的方法,java,arrays,sorting,Java,Arrays,Sorting,未排序数组和整数k,创建一个方法,重新排列数组中的元素,使所有小于或等于k的元素位于任何大于k的元素之前 这是我的代码,它不起作用 public class SmallerFirst { public int[] sort(int[] a, int k) { if(a.length == 1) { return a; } if(a.length == 0) {
public class SmallerFirst
{
public int[] sort(int[] a, int k)
{
if(a.length == 1)
{
return a;
}
if(a.length == 0)
{
return a;
}
else
{
int last = (a.length-1);
for(int pos=0; pos<a.length; pos++)
{
for(int x=1;x>0;x++)
{
if(last == 0)
{
break;
}
if(a[pos] > k)
{
swap(a,pos,last); last--; continue;
}
else
{
break;
}
}
}
return a;
}
}
public void swap(int[] a,int p1,int p2)
{
int temp = 0;
temp = a[p2];
a[p2] = a [p1];
a[p1]=temp;
}
}
公共类SmallerFirst
{
公共整数[]排序(整数[]a,整数k)
{
如果(a.length==1)
{
返回a;
}
如果(a.length==0)
{
返回a;
}
其他的
{
int last=(a.length-1);
用于(int pos=0;pos0;x++)
{
如果(最后==0)
{
打破
}
如果(a[pos]>k)
{
交换(a,pos,最后);最后--;继续;
}
其他的
{
打破
}
}
}
返回a;
}
}
公共无效掉期(int[]a、int p1、int p2)
{
内部温度=0;
温度=a[p2];
a[p2]=a[p1];
a[p1]=温度;
}
}
数组。排序(yourntarray)
将是显而易见的选择。这应该可以满足您的需要
public static void sort(int[] a, int k) {
if(a.length > 1) {
int last = (a.length-1),
first = 0;
while(last > first) {
if(a[first] <= k) first++;
else if(a[last] > k) last--;
else swap(a, first, last);
}
}
}
公共静态无效排序(int[]a,int k){
如果(a.长度>1){
int last=(a.length-1),
第一个=0;
while(最后一个>第一个){
如果(a[第一]k)最后--;
else交换(a、第一个、最后一个);
}
}
}
重新排列数组中的元素,使所有元素小于或等于
等于k的元素排在大于k的元素之前
- 问题不需要对数组进行排序
很方便,但它不必要地将Arrays.sort()
问题变成了O(n)
问题O(nlogn)
- 简单的解决方案是,时间:
和空间O(n)
,也就是说,准备一个与输入数组大小相同的空数组,然后在输入数组中循环,如果O(n)
元素是类项目,请尝试自己求解。否则使用Arrays.sort(…):)或查看Arrays.sort的代码是否需要保存它们的显示顺序?像
导致[1,3,5,2,10]k=4
?[1,3,2,5,10]
什么?我认为他依赖于为(int x=1;x>0;x++)
语句。break
仍然未使用。。。丑陋,不是最有效的方式,我猜,这会对整个数组进行排序,但op我猜对元素1211,9,7,12,20,17,19没问题,我并没有声称提供了最有效的方式,但可能是最简单的:)x
int p = -1; // flag pointer int w = 0; // working pointer for (; w <= a.length - 1; w++) { if (a[w] <= k) { p++; if (w != p) { swap(a, p, w); } } }