Java 选择排序在零或负输入情况下工作不正常
我不太清楚为什么选择排序不能处理数组中的负数和零。它适用于所有正整数。如有反馈,将不胜感激Java 选择排序在零或负输入情况下工作不正常,java,arrays,selection-sort,Java,Arrays,Selection Sort,我不太清楚为什么选择排序不能处理数组中的负数和零。它适用于所有正整数。如有反馈,将不胜感激 private static void selectionSort(int[] digits) { for (int i = 0; i < digits.length - 1; i++) { int index = i; for (int j = i + 1; j < digits.length; j++) { if (
private static void selectionSort(int[] digits) {
for (int i = 0; i < digits.length - 1; i++) {
int index = i;
for (int j = i + 1; j < digits.length; j++) {
if (digits[j] < digits[index]) {
index = j;
}
int min = digits[index];
digits[index] = digits[i];
digits[i] = min;
}
}
System.out.println("Array after sorrting:");
System.out.println("Number of digits in array: " + digits.length);
System.out.print("Digits in array: ");
for (int i: digits) {
System.out.print(i + " ");
}
System.out.println("\n");
}
private static void selectionSort(int[]位){
对于(int i=0;i
选择排序方法以及项目的类别:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = 0;
do {
n = getNumDigits(in);
if (n != 0) {
int[] digits = new int[n];
getDigits(digits, in);
displayDigits(digits);
selectionSort(digits);
}
} while (n != 0);
in.close();
System.out.println("No digits to sort? Goodbye! ");
}
// Given a Scanner as input, prompts the user for the number of digits they will
// be
// entering into an array. If the number given by the user is less than 0,
// display
// an error message and ask for a number that is 0 or greater. When a valid
// number is
// received, return it to the calling program.
private static int getNumDigits(Scanner inScanner) {
int digits = 0;
do {
System.out.print("Please enter the number of digits to be stored: ");
digits = inScanner.nextInt();
if (digits < 0) {
System.out.println("ERROR! You must enter a non-negative number of digits!\n");
}
} while (digits < 0);
return digits;
}
// Given an array and a Scanner as input, prompt the user to input integers to
// fill the
// array. The procedure should display a prompt for the user to enter an
// integer, and
// should loop until the entire array is filled with integer.
private static void getDigits(int[] digits, Scanner inScanner) {
int i = 0;
while (i < digits.length) {
System.out.print("Enter integer " + i + ": ");
digits[i] = inScanner.nextInt();
i++;
}
}
// Given an array as input, displays the total number of digits contained in the
// array
// and displays the contents of the array in order, starting at index 0 and
// ending
// with the final index of the array.
private static void displayDigits(int[] digits) {
System.out.println("\nArray before sorrting:");
System.out.println("Number of digits in array: " + digits.length);
System.out.print("Digits in array: ");
for (int i = 0; i < digits.length; i++) {
System.out.print(digits[i] + " ");
}
System.out.println("\n");
}
// FOR LAB10B
// Given an array of integers as input, sorts the array using the Selection Sort
// algorithm
// provided in the Closed Lab 10 write-up.
private static void selectionSort(int[] digits) {
for (int i = 0; i < digits.length - 1; i++) {
int index = i;
for (int j = i + 1; j < digits.length; j++) {
if (digits[j] < digits[index]) {
index = j;
}
int min = digits[index];
digits[index] = digits[i];
digits[i] = min;
}
}
System.out.println("Array after sorrting:");
System.out.println("Number of digits in array: " + digits.length);
System.out.print("Digits in array: ");
for (int i: digits) {
System.out.print(i + " ");
}
System.out.println("\n");
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int n=0;
做{
n=getNumDigits(英寸);
如果(n!=0){
int[]位=新的int[n];
getDigits(数字,英寸);
显示数字(数字);
选择排序(数字);
}
}而(n!=0);
in.close();
System.out.println(“没有要排序的数字?再见!”);
}
//给定一个扫描仪作为输入,提示用户他们将输入的位数
//是
//进入一个数组。如果用户给出的数字小于0,
//展示
//显示错误消息并询问0或更大的数字。当一个有效的
//号码是
//收到后,将其返回到调用程序。
专用静态int getNumDigits(扫描仪扫描程序){
整数位数=0;
做{
System.out.print(“请输入要存储的位数:”);
digits=inScanner.nextInt();
如果(数字<0){
System.out.println(“错误!您必须输入非负数的位数!\n”);
}
}数字<0;
返回数字;
}
//给定一个数组和一个扫描器作为输入,提示用户将整数输入到
//填满
//数组。该过程应显示提示,提示用户输入
//整数,和
//应循环,直到整个数组充满整数。
专用静态无效getDigits(int[]位,扫描仪扫描){
int i=0;
while(i
谢谢&我为所有的编辑道歉。我从不使用在线论坛。尝试在内部循环外进行交换:-
private static void selectionSort(int[] digits) {
for (int i = 0; i < digits.length - 1; i++) {
int index = i;
for (int j = i + 1; j < digits.length; j++) {
if (digits[j] < digits[index]) {
index = j;
}
//previously u were doing swapping here
//System.out.println("inner : " + convert(digits));
}
//i shifted the swapping block to this place
int min = digits[index];
digits[index] = digits[i];
digits[i] = min;
//System.out.println("outer : " + convert(digits));
}
System.out.println("Array after sorrting:");
System.out.println("Number of digits in array: " + digits.length);
System.out.print("Digits in array: ");
for (int i: digits) {
System.out.print(i + " ");
}
System.out.println("\n");
}
private static void selectionSort(int[]位){
对于(int i=0;i
============
输入:4,0,-4,5,2,1
排序后的数组:
数组中的位数:6
数组中的数字:-4 0 1 2 4 5
============
输入:3,4,2,5,3,21,-7,3,26,-43,-12,22
排序后的数组:
数组中的位数:12
数组中的数字:-43-12-7 2 3 3 3 4 5 21 22 26以什么方式“不起作用”?我用负值测试了它,在这里效果很好。我更新了全班的帖子(不太长)。谢谢你发布了全班的帖子,现在告诉我们它是如何工作的。我们无法读懂你的心思。您正在输入什么值。你得到了什么结果?你期望得到什么结果?我不知道还有什么别的说法。当我输入正数时,它的排序非常完美。当输入有负数时,它不能正确排序。这个数组以[4,0,-4,5,2,1]开头,并将其排序为[0,1,-4,2,4,5]@almosthavoc我已经回答了你的问题。您需要更改交换的位置