我有这个功能用于选择排序:
public static void selectionSort(int[] n)
{
for(int start = 0; start < n.length; start++)
{
int smallest = start;
for(int i = start+1; i<n.length; i++)
{if(n[i]<n[start])
smallest = i;}
int tmp = n[start];
n[start] = n[smallest];
n[smallest] = tmp;
}
}
我称之为。
Random ran = new Random();
int n = 10;
int[] a = new int[n];
for(int i = 0; i<n; i++)
a[i] = ran.nextInt(1000);
然而,它会导致这样的结果..
640 900 610 168 650 610 527 356 802 486
486 640 356 168 610 527 610 650 802 900
最上面的一个没有排序,下面的一个应该排序。但是,这是不正确的。
答案 0 :(得分:4)
您正在比较每个单一迭代的初始 keep_track = []
def recursion(input_string, finding_name):
list_names = basically would do this the first time
for item in list_names:
if item is A SINGLE WORLD:
if name is finding_name:
keep_track append name
else name is A LIST WITH MULTIPLE WORDS:
recursion(item, finding_name)
return list_names
索引,即使您找到了较小的数字,您仍然将它与原始start
进行比较,这不应该发生。找到较小的数字后,您需要使用该索引进行比较。
将其与每次迭代的最小数量进行比较start
更改为(n[i]<n[start])
,这将解决您的问题。
希望这有帮助!
答案 1 :(得分:1)
第二个循环没用,因为你只是比较第一个和最后一个项目而smallest
仅从这个比较中获取它的值。
通过你的代码,我猜你试图做Bubble Sort,但比较和索引管理是错误的,这是一个可行的解决方案:
public static void main(String[] args) {
Random ran = new Random();
int n = 10;
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = ran.nextInt(1000);
}
printArray(array);
selectionSort(array);
printArray(array);
}
private static void printArray(int[] array) {
System.out.print("Array: ");
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
private static void selectionSort(int[] array) {
for (int j = 0; j < array.length; j++) {
// Subtract 1 so you don't get a NullPointerException
// Subtract j so you don't compare the numbers already ordered
for (int i = 0; i < array.length - 1 - j; i++) {
if (array[i] > array[i + 1]) {
int tmp = array[i];
array[i] = array[i + 1];
array[i + 1] = tmp;
}
}
}
}
该算法来自上面链接的Spanish version(我来自阿根廷),也是英文版的其他符号。
希望这会有所帮助。最好的问候
答案 2 :(得分:-1)
尝试使用此版本的代码功能:
public static void main(String[] args) {
Random ran = new Random();
int n = 10;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = ran.nextInt(1000);
selectionSort(a);
for (int i : a) {
System.out.print(i+" ");
}
}
public static void selectionSort(int[] n)
{
for(int start = 0; start < n.length-1; start++)
{
int smallest = start;
for(int i = start+1; i<n.length; i++)
{if(n[i]<n[smallest])
smallest = i;}
int tmp = n[start];
n[start] = n[smallest];
n[smallest] = tmp;
}
}