黑马程序员技术交流社区
标题:
冒泡排序
[打印本页]
作者:
游呤人
时间:
2015-7-17 01:02
标题:
冒泡排序
本帖最后由 游呤人 于 2015-7-17 01:49 编辑
public class ArreyDome {
/*
* 首先我们来看看,常规的方式实现冒泡排序,
* 冒泡排序的思想主要是两两比较,直到数组的结束,而每次比较出来的结果,
* 后面的值一定是最大(升序)或最小(降序)的那么,我们开始遍历数组,
* 每次遍历后,后面的值一定是最大或最小的那么我们每次遍历完后,后面的值就可以不要再考虑了
* 直到程序到数组不在可以比较的时候.
* */
public void bubblie(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
/*
* 前面的方法是,从后面向前面递减,那么我们为什么不吧比较的次数从后往前递增呢?
* 每次遍历都保证数组的前面的数据都是有序的呢?
*
* */
public void bubblie1(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
/*
* 上面的程序都是两层循环嵌套,但每次无非比较的还是数组.
* 那么将数组在传给自己就好了,何必这么麻烦,但是需要考虑的是程序
* 在调用自己的话对无限制的运行下去,那么我需要考虑一个边界,
* 来看看前两个程序,无论是第一种还是第二种他都是将程序外层循环的边界设定为arr.length()
* 这样我们就定义一个标记,当这个标记等于arr.length()就返回即可
*
* */
public void bubblie2(int[] arr,int i) {
if(arr.length==i){
return;
}
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
i++;
bubblie2(arr, i);
}
复制代码
//请经量避免使用递归,因它很耗内存的
作者:
eayonh
时间:
2015-7-17 01:35
学习了…………
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2