(这是一个项目,所以是的,它是家庭作业)
任务是使用用户输入创建数组(我能够做到),然后对于第二部分,使用单独的方法按升序对数组进行排序然后输出。我已经把它做了我需要的一切,除了我不知道如何让它排序。方向说使用从0到长度的while循环来找到最小值然后与1st交换,但我不知道如何做到这一点。这就是我到目前为止所做的:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int storage = getNumDigits(in);
if(storage == 0){
System.out.print("No digits to store? OK, goodbye!");
System.exit(0);
}
int []a = new int [storage];
a = getDigits(a, in);
displayDigits(a);
selectionSort(a);
}
private static int getNumDigits(Scanner inScanner) {
System.out.print("Please enter the number of digits to be stored: ");
int stored = inScanner.nextInt();
while(stored < 0){
System.out.println("ERROR! You must enter a non-negative number of digits!");
System.out.println();
System.out.print("Please enter the number of digits to be stored: ");
stored = inScanner.nextInt();
}
return stored;
}
private static int[] getDigits(int[] digits, Scanner inScanner) {
int length = digits.length;
int count = 0;
int toBeStored = 0;
while(count < length){
System.out.print("Enter integer " +count +": ");
toBeStored = inScanner.nextInt();
digits[count] = toBeStored;
count++;
}
return digits;
}
private static void displayDigits(int[] digits) {
int len = digits.length;
System.out.println();
System.out.println("Array before sorting:");
System.out.println("Number of digits in array: " +len);
System.out.print("Digits in array: ");
for(int cnt = 0; cnt < len-1; cnt++){
System.out.print(digits[cnt] + ", ");
}
System.out.println(digits[len-1]);
}
private static void selectionSort(int[] digits) {
int l = digits.length;
System.out.println();
System.out.println("Array after sorting:");
System.out.println("Number of digits in array: " +l);
System.out.print("Digits in array: ");
int index = 0;
int value = digits[0];
int indVal = digits[index];
while(index < l){
indVal = digits[index];
if(indVal <= value){
indVal = value;
digits[index] = value;
index++;
}
else if(value < indVal){
index++;
}
System.out.print(value);
//This is where I don't know what to do.
}
}
答案 0 :(得分:7)
你被要求写selection sort。这是一个简单的O(n 2 )算法。你需要的只是两个for循环。对于外部for循环的每次迭代,内部for循环搜索列表的未排序部分并找到最小元素。如您所见,最小元素与列表未排序部分中的第一个元素交换。
答案 1 :(得分:0)
一旦你知道了最小项目的索引,只需交换两者就可以了:
temp = array [0];
array [0] = array [indx];
array [indx] = temp;
答案 2 :(得分:0)
您提到的方法名称是 selectionSort ,我认为您应该在此处使用选择排序代码。
private static void selectionSort(int [] digits){ int len = digits.length;
/* Selection sort starts */
for (int i = 0; i < len; i++) {
int min = i;
for (int j = i + 1; j < len; j++) {
if (digits[j]<digits[min]) {
min = j;
}
}
/**
* Swap data
*/
int temp = digits[i];
digits[i] = digits[min];
digits[min] = temp;
}
/* Selection sort ends */
/* Print necessary information here */
System.out.println();
System.out.println("Array after sorting:");
System.out.println("Number of digits in array: " +len);
System.out.print("Digits in array: ");
/* Print digit */
for(int cnt = 0; cnt < len-1; cnt++){
System.out.print(digits[cnt] + ", ");
}
System.out.println(digits[len-1]);
}
上面是一个例子,但是在排序方法selectionSort之后你最好把逻辑用于打印数组信息,因为这个方法应该只用于排序而不是打印..