[英]Find the k smallest integer in an array
這是我的代碼,它適用於查找1-7個最小整數,但是8和9.當我在數組中找到8個最小整數時,它返回null。 任何人都可以幫我解決問題嗎? 我在這里使用quicksort。 非常感謝!
更新:我已經找到問題,這是主函數中的數組。 在我改為下面的樣子后,
int[] arr = {2, 3, 1, 7, 5, 6, 20, 8, 4, 9};
和
if(front>=end) return input;
它現在有效!
import java.util.Arrays;
import java.io.*;
class quicksort{
public static void main(String[] args){
int[] arr = new int[9];
arr[0] = 7;
arr[1] = 2;
arr[2] = 4;
arr[3] = 8;
arr[4] = 3;
arr[5] = 5;
arr[6] = 1;
arr[7] = 0;
arr[8] = 10;
System.out.println((Arrays.toString(findKSamllest(arr,8))));
}
public static int partition(int[] input, int front, int end){
int pivot = input[front];
while(front < end){
while(input[front]<pivot)
front++;
while(input[end]>pivot)
end--;
swap(input,front,end);
}
return front;
}
public static void swap(int[] input, int s, int l){
int temp = input[s];
input[s] = input[l];
input[l] = temp;
}
public static int[] findK(int[] input, int front, int end, int k){
if(front>=end) return null;
int pivot = partition(input,front,end);
//System.out.println(pivot);
if(k==pivot){
return Arrays.copyOfRange(input,0,pivot);
}
else {
if(k<pivot)
return findK(input,front,pivot,k);
return findK(input,pivot+1,end,k);
}
}
public static int[] findKSamllest(int[] input, int k){
return findK(input, 0, input.length-1, k);
}
}
更改
if(front >= end) return null;
至
if(front > end) return null;
站在巨人的肩膀上,並使用已有的庫:
Arrays.sort(myArray);
int[] returnArray = new int(NUM_ITEMS_TO_RETURN);
for (int i=0; i < NUM_ITEMS_TO_RETURN; i++)
{
returnArray[i] = myArray[i];
}
return returnArray;
顯然你必須做一些錯誤檢查,例如初始數組大於或等於你想要返回的項目數,但這是微不足道的。
您可以節省一些時間,並使用花哨的新Java 8 API給您的老師留下深刻印象。
它提供了流和有用的功能,可以在一條(長)行或5條中解決這個問題,如果它應該是可讀的;-)
final List<Integer> sortedKList = Arrays.asList(7, 2, 4, 8, 3, 5, 1, 0, 10)
.stream()
.sorted()
.limit(7)
.collect(Collectors.toList());
然后,您可以使用以下方式查看結果
sortedKList.forEach(System.out::println);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.