采用Java实现冒泡排序过程中遇到的问题及解决方法。
一、什么是冒泡排序?
冒泡排序即在一组元素中,用比较相邻两个元素的方法进行排序,如第一个元素与第二个元素比较,如果元素1比元素2大,则交换位置,然后元素2与元素3进行比较,依次类推,直到不需要交换。
元素交换的方法`
temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp;
将arr[j]的值报错到temp中,因为arr[j]的值要报错arr[j+1]的值会发生变化,如果不用一个中间值报错,arr[j+1]没有办法取得arr[j]的值。
二、遇到的问题package com.zjiedonl.javase.array;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {2, 41, 1, 3, 43, 7};
int temp=0;
//temp=0;
//int flag;
for (int i = 0; i
开始写的的代码是上面这样的,编译没有错误,但是结果不符合冒泡排序的要求,结果如下
将主要代码拿出来
for (int i = 0; i
开始的想法是冒泡排序不是将最大的数一直交换到最后一个吗,而temp接收的时大的那个值,那temp肯定是最大的,我只要在里面的循环结束之后将temp的值输出就好了吗。
然后发现交换是需要条件的,即if里面要前面的数大于后面的数才可以交换,如果数列里面的数是从小到大排好的,就不会触发交换条件,temp的值就一直是上次交换的值,所以出现了上面的运行结果
总结
所以还是需要对结果进行for循环打印,并且修改了一下代码其他的小问题,即外面的循环次数是arr数组的长度,是可以确定的,只需要控制循环多少次就好了,不需要用i的值,所以可以把i的值从大到小递减,但是内循环需要j的值,不可以改变,只能从小到大。
package com.zjiedonl.javase.array;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {2, 41, 1, 3, 43, 7};
int temp;
temp=0;
//int flag;
for (int i = arr.length-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if(arr[j+1]



