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
- java冒泡算法和选择排序算法在数组遍历中的应用(初级)
- 【算法初级】排序--“冒泡”和“选择”对比
- 初级排序算法之冒泡、选择、插入、希尔排序(附Java实现和分析)
- 初级排序算法(选择、插入、冒泡排序)
- 数组的选择排序算法和冒泡排序算法
- Java排序算法(冒泡排序、选择排序、插入排序、反数组排序、快速排序)例子
- Java学习笔记:冒泡排序算法和选择排序算法
- 三种初级排序算法(冒泡、选择、直接插入)java实现及其性能比较
- Java数组排序算法,冒泡,选择,插入,快速排序
- Java数组排序算法,冒泡,选择,插入,快速排序
- Java基础知识 Part03(数组, 冒泡排序/选择排序, 小算法)
- 算法--数组的冒泡排序和选择排序
- 算法--数组冒泡排序和选择排序原理分析
- (三)算法--排序算法选择排序和冒泡排序
- 冒泡排序算法和选择排序算法
- 冒泡算法和选择排序
- 冒泡算法和选择排序
- Java排序算法之冒泡排序和选择排序
- Scala Actor,receive不断接收消息,react复用线程,结合case class的actor,Future使用,使用Actor进行wordCount
- 网易2017秋招编程题集合
- Spring AOP详解
- C语言:组合:逻辑表达式
- Resources 与 StreamingAssets
- java冒泡算法和选择排序算法在数组遍历中的应用(初级)
- 在docker中部署mysql-cluster
- Codis集群的搭建与使用
- Qt tcp 粘包问题
- centos7下安装hadoop2.7.3(时间戳2017年7月1日)
- Linux系统目录结构以及详细分析说明和LINUX常用命令
- Linux常见命令(一)
- PyCharm基本设置、常用快捷键
- linux下php无法创建或写文件问题解决