本帖最后由 游呤人 于 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);
- }
复制代码
//请经量避免使用递归,因它很耗内存的 |
|