java冒泡算法和选择排序算法在数组遍历中的应用(初级)

来源:互联网 发布:淘宝淘金币领取 编辑:程序博客网 时间:2024/06/05 05:55

一、冒泡排序

数组中元素两两(1和2比后2和3比后3和4比)比较,若顺序错误,则交换顺序,否则不交换。

口诀:N个 数字来排序,两两相比,小靠前,外层循环N-1,内层循环,N-1-i。

for(int i=0;i<N-1;i++){           // 比较的轮数for(int j=0;j<N-1-i;j++){       //每轮比较的次数//两两相比….If( [j]>[j+1]){//交换}}}
冒泡排序的分析图:


下面利用冒泡排序使数组升序排列:

public class TestMaoPao{//主方法用于测试public static void main(String [] args){// 声明数组并赋值int [] array = new int[]{23,32,12,34,24};//调用方法输出数组(源数组)System.out.println("源数组:");TestMaoPao.print(array);System.out.println("\n\n==================================\n");// 调用冒泡排序的方法 降序排列TestMaoPao.maoPao(array);//调用方法输出数组(排序后的新数组)System.out.println("新数组:");TestMaoPao.print(array);}// 创建冒泡方法用于降序排序public static void maoPao(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 temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}// 内层for结束}// 外层for结束}// 创建方法用于输出数组中的元素public static void print(int [] arr){for(int i = 0;i < arr.length;i++){System.out.print(arr[i]+"\t");}}}
运行图(dos窗口):

内存分析图:

1、声明一个int类型数组 array,赋值时在堆内存中开辟出5长度的空间,内存地址为0x8fdc(16进制),下标是01234,

内存地址赋给栈内存中的array;2、调用maoPao方法,将地址从main方法中赋到maoPao方法中arr,arr的地址指向0x8fdc,

然后开始运行方法,排序,用过方法后方法与内存之间断开 3、调用后主方法与maoPao方法之间断开,array指向的地址0x8fdc中数组中的元素顺序已经排好。

二、选择排序

每次都找到当次最大的数,按照从小到大或从大到小排序。
选择排序的分析图:
下面使用选择排序的方法使数组升序排序:
public class PaiXu{//主方法用于测试public static void main(String [] args){int [] arrB={43,56,4,57,7};//调用选择排序的方法PaiXu.xuanZe(arrB);    //arr是实际参数//调用输出的方法PaiXu.print(arrB);}/**该方法的功能,是排序, 选择排序*/public static void xuanZe(int [] arr){for(int i=0;i<arr.length-1;i++){    //比较的轮数    for(int j=i+1;j<arr.length;j++){  //比较的次数if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}}// 输出方法public static void print(int []arr){   for(int i=0;i<arr.length;i++){      System.out.print(arr[i]+"\t");   }}}
运行图:
内存分析图和冒泡内存分析差不多,就不画了,等我有时间补上。

三、思考

上述两个算法中,在内层 for 循环中的 if 里都有两个数的交换,可不可以创建一个方法呢?


欢迎大家指正提问!

阅读全文
1 0
原创粉丝点击