使用BubbleSort对int数组进行sorting

为什么我的打印出来的数组没有在下面的代码中sorting?

public class BubbleSort { public void sortArray(int[] x) {//go through the array and sort from smallest to highest for(int i=1; i<x.length; i++) { int temp=0; if(x[i-1] > x[i]) { temp = x[i-1]; x[i-1] = x[i]; x[i] = temp; } } } public void printArray(int[] x) { for(int i=0; i<x.length; i++) System.out.print(x[i] + " "); } public static void main(String[] args) { // TestBubbleSort BubbleSort b = new BubbleSort(); int[] num = {5,4,3,2,1}; b.sortArray(num); b.printArray(num); } } 

你需要两个循环来实现气泡sorting。

示例代码:

 public static void bubbleSort(int[] numArray) { int n = numArray.length; int temp = 0; for (int i = 0; i < n; i++) { for (int j = 1; j < (n - i); j++) { if (numArray[j - 1] > numArray[j]) { temp = numArray[j - 1]; numArray[j - 1] = numArray[j]; numArray[j] = temp; } } } } 

你只有一个通过你的arrays! 泡泡sorting要求你保持循环,直到你发现你不再做任何交换; 因此运行时间为O(n ^ 2)。

尝试这个:

 public void sortArray(int[] x) { boolean swapped = true; while (swapped) { swapped = false; for(int i=1; i<x.length; i++) { int temp=0; if(x[i-1] > x[i]) { temp = x[i-1]; x[i-1] = x[i]; x[i] = temp; swapped = true; } } } } 

一旦在循环结束时swapped == false ,你已经做了一个完整的遍历,没有发现任何x[i-1] > x[i]实例,因此,你知道数组是sorting的。 只有这样你才能终止algorithm。

你也可以用n+1迭代的for循环replaceouter while循环,这将保证数组的顺序; 然而, while循环具有在优于最坏情况下提前终止的优点。

你的sorting逻辑是错误的。 这是冒泡sorting的伪代码:

 for i = 1:n, swapped = false for j = n:i+1, if a[j] < a[j-1], swap a[j,j-1] swapped = true → invariant: a[1..i] in final position break if not swapped end 

看到这个sorting网站的所有各种sorting方法的好教程。

这不是泡沫sortingalgorithm,你需要重复,直到你没有任何交换:

 public void sortArray(int[] x) {//go through the array and sort from smallest to highest for(;;) { boolean s = false; for(int i=1; i<x.length; i++) { int temp=0; if(x[i-1] > x[i]) { temp = x[i-1]; x[i-1] = x[i]; x[i] = temp; s = true; } } if (!s) return; } } 

气泡sorting嵌套循环应该这样写:

 int n = intArray.length; int temp = 0; for(int i=0; i < n; i++){ for(int j=1; j < (ni); j++){ if(intArray[j-1] > intArray[j]){ //swap the elements! temp = intArray[j-1]; intArray[j-1] = intArray[j]; intArray[j] = temp; } } } 
 public class BubbleSort { public void sorter(int[] arr, int x, int y){ int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } public void sorter1(String[] arr, int x, int y){ String temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } public void sertedArr(int[] a, String[] b){ for(int j = 0; j < a.length - 1; j++){ for(int i = 0; i < a.length - 1; i++){ if(a[i] > a[i + 1]){ sorter(a, i, i + 1); sorter1(b, i, i + 1); } } } for(int i = 0; i < a.length; i++){ System.out.print(a[i]); } System.out.println(); for(int i = 0; i < b.length; i++){ System.out.print(b[i]); } // } public static void main(String[] args){ int[] array = {3, 7, 4, 9, 5, 6}; String[] name = {"t", "a", "b", "m", "2", "3"}; BubbleSort bso = new BubbleSort(); bso.sertedArr(array, name); } } 
 public class SortingArray { public static void main(String[] args) { int[] a={3,7,9,5,1,4,0,2,8,6}; int temp=0; boolean isSwapped=true; System.out.println(" before sorting the array: "); for(int i=0;i<a.length;i++) { System.out.print(a[i]); } System.out.println(""); do { isSwapped=false; for(int i=0;i<a.length-1;i++) { if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } }while(isSwapped); System.out.println("after sorting the array: "); for(int array:a) { System.out.print(array); } } } 

java代码

 public void bubbleSort(int[] arr){ boolean isSwapped = true; for(int i = arr.length - 1; isSwapped; i--){ isSwapped = false; for(int j = 0; j < i; j++){ if(arr[j] > arr[j+1]}{ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; isSwapped = true; } } } } 

Java中的标准气泡sorting实现:

 //Time complexity: O(n^2) public static int[] bubbleSort(int[] arr) { if (arr == null || arr.length <= 1) { return arr; } for (int i = 0; i < arr.length; i++) { for (int j = 1; j < arr.length - i; j++) { if (arr[j - 1] > arr[j]) { arr[j] = arr[j] + arr[j - 1]; arr[j - 1] = arr[j] - arr[j - 1]; arr[j] = arr[j] - arr[j - 1]; } } } return arr; }