public static void main(String[] args) {
int a[]={13,33,1,32,8,10,11,6};
bubbleSort(a);
}
public static void bubbleSort(int []a){
int temp=0;
int n= a.length;
for(int i=0;i<n;i++ ){
for(int j=1; j<n-1;j++){
if(a[j-1]>a[j]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}System.out.println(a[i]);
}
}
我似乎没有得到如何设法从算法中随机排序!? 1和8甚至根本没有出现,13显示3次。
结果: 13 13 10 11 13 32 33 6
答案 0 :(得分:1)
我发现了2个错误。
for(int j = 1; j < n - 1; j++){
我替换了这个代码行。
for (int j = 1; j < (n - i); j++) {
请尝试以下代码。
public class BubbleSort{
public static void main(String[] args) {
int a[] = {13, 33, 1, 32, 8, 10, 11, 6};
bubbleSort(a);
}
public static void bubbleSort(int[] a) {
int temp = 0;
int n = a.length;
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {
if (a[j - 1] > a[j]) {
//swap elements
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
// print array after sorting.
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
答案 1 :(得分:0)
j
应该一直迭代到n
(直到n-1
)。
变化:
for(int j=1; j<n-1; j++){
为:
for(int j=1; j<n; j++){
并且您的冒泡排序将起作用。
答案 2 :(得分:0)
这里有两个主要问题:
正如@alfasin所说“j应该一直向上迭代直到n(直到n-1)。”
System.out.println
应在执行完所有操作后执行,而不是在排序过程中执行。
以下内容应该有效:
public class Main {
public static void main(String[] args) {
int a[]={13,33,1,32,8,10,11,6};
int result[] = bubbleSort(a);
for(int i:result)
System.out.println(i);
}
public static int[] bubbleSort(int []a){
int temp=0;
int n= a.length;
for(int i=0;i<n;i++) {
for(int j=1; j<n;j++){
if(a[j-1]>a[j]) {
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
答案 3 :(得分:0)
第二级迭代在应该停止之前停止一步。而你正在错误的阶段打印数组元素。
public static void bubbleSort(int []a){
int temp=0;
int n= a.length;
for(int i=0;i<n;i++ ){
for(int j=1; j<n;j++){
if(a[j-1] > a[j]){
temp=a[j-1]; a[j-1]=a[j]; a[j]=temp;
}
}
}
for(int i: a) {
System.out.print(i+" ");
}
}
答案 4 :(得分:0)
输出不是很有用,因为您在排序过程中正在打印valies。
{{1}}
在结果的末尾使用它。 @alfasin已经指出了另一个错误。
答案 5 :(得分:0)
除了alfashin已经说过的,你的循环应该是n,而不是n-1是你不输出你的最终结果,而是校准步骤i的中间结果:
的System.out.println(A [1]);
确保在完成排序后输出
答案 6 :(得分:0)
除了每个人都提到的两个错误之外,还值得注意的是,关于如何执行冒泡排序的逻辑是次优的。
您正在使用外部for循环,假设您需要执行内循环一致的时间。但实际上这一切都取决于你正在使用的列表。
我将使用此代码的固定版本来演示它:
public static void main(String[] args) {
int a[] = {13, 33, 1, 32, 8, 10, 11, 6};
bubbleSort(a);
}
public static void bubbleSort(int[] a) {
int temp;
int n = a.length;
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (a[j - 1] > a[j]) {
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
现在外部for循环运行n次,所以8次。然后你得到一个排序列表作为输出。
[1, 6, 8, 10, 11, 13, 32, 33]
但如果运行次数少于8次会怎样?通过将n替换为6来尝试。输出:
[1, 6, 8, 10, 11, 13, 32, 33]
相同的结果,这意味着您在已排序的列表上运行两次排序。如果你有一个已经排序的1000个整数的列表,这可能会成为一个问题,因为你将循环1000次,没有任何内容。
来自维基百科:“冒泡排序对大多数其他实现的唯一重要优势是,检测列表有效排序的能力已内置到算法中。当列表已经排序时(最好) -case),冒泡排序的复杂性只有O(n)。“
所以你基本上破坏了使用冒泡排序的唯一原因。
你会想要使用其他类型的循环,祝你好运。