冒泡排序
概念:
通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,
若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
思路:
- 化繁为简
- 对这个数组长度为7的数组进行6轮排序
- 每轮将最大的数排在后面(第一轮将最大数排在最后;第二轮将第二大的数放在倒数第2(倒数第2则需要循环次数比上次少1);…)
- 每轮写成一个内循环
- 循环的轮数写成一个外循环
代码:
int array[] = {10,15,58,9,95,70,1};
System.out.println("原数组为:");
for(int i=0; i<array.length; i++){
System.out.print(array[i] + " ");
}
//先写外循环,用j
int tem = 0;
for(int j = 0; j < 6; j++){//内循环次数用array.length-1-i表示因为这次循环找到大数后下次循环次数总要-1
if(array[j] > array[j+1]){//判断邻近元素大小
tem = array[j];
array[j] = array[j+1];
array[j+1] = tem;
}
}
System.out.println("\n第1轮循环后数组为:");
for(int k=0; k<array.length; k++){
System.out.print(array[k] + " ");
}
运行结果:
- 先死后活
- 同理补充外循环,控制循环轮数
- 外循环轮数可以利用array.length表示出来,这样直接添加数组元素代码也可以实现新的排序
代码:
int array[] = {10,15,58,9,95,70,1};
System.out.println("原数组为:");
for(int i=0; i<array.length; i++){
System.out.print(array[i] + " ");
}
//冒泡排序
int tem = 0;
for(int i = 0; i < array.length-1; i++){
for(int j = 0; j < array.length-1-i; j++){//内循环次数用array.length-1-i表示因为这次循环找到大数后下次循环次数总要-1
if(array[j] > array[j+1]){//判断邻近元素大小
tem = array[j];
array[j] = array[j+1];
array[j+1] = tem;
}
}
System.out.println("\n第"+ (i+1) +"轮循环后数组为:");
for(int k=0; k<array.length; k++){
System.out.print(array[k] + " ");
}
}
运行结果:
其实冒泡排序并不难,就如同它的概念一样,就是逐个的把大的数利用循环依次放在后面,思想都是通用的,理解了概念和思想以后换成其他语言也一样可以写出来的。
要是有小伙伴想直接运行试试看的可以根据全代码直接运行试试
全代码:
public class BubbleSort{
public static void main(String[] args){
/*:冒泡排序
通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,
若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
*/
int array[] = {10,15,58,9,95,70,1,81,-1,-11,55};
System.out.println("原数组为:");
for(int i=0; i<array.length; i++){
System.out.print(array[i] + " ");
}
//思路:
//1.对这个数组长度为array.length的数组进行array.length-1轮排序
//2.每轮将最大的数排在后面(第一轮将最大数排在最后;第二轮将第二大的数放在倒数第2(倒数第2则需要循环次数比上次少1);....)
//3.每轮写成一个内循环
//4.循环的轮数写成一个外循环
//5.外循环轮数可以利用array.length表示出来,这样直接添加数组元素代码也可以实现新的排序
int tem = 0;
for(int i = 0; i < array.length-1; i++){
for(int j = 0; j < array.length-1-i; j++){//内循环次数用array.length-1-i表示因为这次循环找到大数后下次循环次数总要-1
if(array[j] > array[j+1]){//判断邻近元素大小
tem = array[j];
array[j] = array[j+1];
array[j+1] = tem;
}
}
System.out.println("\n第"+ (i+1) +"轮循环后数组为:");
for(int k=0; k<array.length; k++){
System.out.print(array[k] + " ");
}
}
}
}
文件名:BubbleSort.java
这里我添加了几组数据,不出意外运行结果应该就是下面的画面了
运行结果: