我的冒泡排序和选择排序是否正确实施?

时间:2016-11-28 16:50:20

标签: java bubble-sort selection-sort

以下是我对冒泡排序算法的看法。

public void bubbleSort(int[] arr) {
  boolean swapped = true;
  int j = 0;
  temp = 0;

while(swapped) {
  swapped = false;
  j++;

for(int i = 0; i < arr.length; i++) {
  if (arr[i] > arr[i + 1]) {
    temp = arr[i];
    arr[i] = arr[i + 1];
    arr[i + 1] = temp;
    swapped = true;
  }
 }
}
}

选择排序:

public int[] selectionSort(int[] arr) {
  int i = 0;
  int j = 0;
  int minValue = 0;
  int minIndex = 0;
  int temp = 0;

for(i = 0; i < arr.length - j; j++) {
   minValue = arr[i];
   minIndex = i;

for(j = i; i < arr.length; j++) {
  if (minValue < arr[i]) {
    minValue = arr[j];
    minIndex = j;
  }
}

if (minValue < arr[i]) {
   temp = arr[i];
   arr[i] = arr[i + 1];
   arr[i + 1] = temp;
}
}
return arr;
}

不确定这些实现。 当我添加一个System.out.println(arr [i]);在那里,泡沫排序的数字出现如下: 4 3 2 1 3 2 1 2 1 1 [I @ 6d06d69c

在第一个if语句之后放置。

现在我创建一个System.out.println(arr [i]);对于选择排序它出来: 1 2 3 4 五 [I @ 6d06d69c

在第二个if语句之后放置。

谢谢

1 个答案:

答案 0 :(得分:0)

您的实施中存在一些我试图纠正的错误。

public void bubbleSort(int[] arr) {
  boolean swapped = true;
  int j = 0;
  temp = 0;

while(swapped) {
  swapped = false;
  j++;

for(int i = 0; i < arr.length-j; i++) {
  if (arr[i] > arr[i + 1]) {
    temp = arr[i];
    arr[i] = arr[i + 1];
    arr[i + 1] = temp;
    swapped = true;
  }
 }
}
}

public int[] selectionSort(int[] arr) {
  int i = 0;
  int j = 0;
  int minValue = 0;
  int minIndex = 0;
  int temp = 0;

for(i = 0; i < arr.length - 1; i++) {
   minValue = arr[i];
   minIndex = i;

for(j = i+1; j < arr.length; j++) {
  if (minValue < arr[j]) {
    minValue = arr[j];
    minIndex = j;
  }
}

if (minValue < arr[i]) {
   temp = arr[i];
   arr[i] = minValue;
   arr[minIndex] = temp;
}
}
return arr;
}