我正在研究算法。而且我在网上搜索了冒泡排序算法,我发现的大多数实现似乎比我自己编写的代码过于复杂。两种算法都起作用。
我的是bubbleSort1,而我在大多数来源中发现的是bubbleSort2。
我在if块中添加了一个计数器。而且似乎第二种算法比第一种具有更多的操作。
static void bubbleSort1(int[] arr) {
int count = 0;
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
count++;
}
}
}
System.out.println(count);
}
static void bubbleSort2(int[] arr) {
int n = arr.length;
int temp = 0;
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {
if (arr[j - 1] > arr[j]) {
temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
count++;
}
}
}
System.out.println(count);
}
对于以下int数组:{0,0,-10,4,100,2,5,5,45,1,-400,3,5,6}
bubbleSort1计数:26
bubbleSort2计数:28
所以显然有区别。
答案 0 :(得分:2)
首先,您的函数( bubbleSort1 )不是冒泡排序。在冒泡排序中,相邻元素彼此之间交换。
第二,在 bubbleSort2 函数中,将最大的元素首先放置在末尾,然后将第二个最大的元素放置在 end-1 处,依此类推。但是在 bubbleSort1 中,最小元素首先在 0 位置移动,然后是第二个最小元素在 1 < / em> ,依此类推。
但是它们两个都是 O(Nˆ2) 时间复杂度。