java12-6 冒泡排序法和选择排序法
1、冒泡排序法
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
分析:
第一次比较排序的结果:会把其中最大的数据排到最大的索引处
第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,
所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
第四次:少3个..
综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,
而随着比较的次数的增加,每次要进行比较的数据依次减少,也就是
for(int x =0; x < arr.length - 1 ;x++)这个是总的比较的次数
{
for(int y =0; y < arr.length - 1 - x; x++){ 这个就是随着次数的增加,每次要进行比较的数据的个数
}
}
为了方便对多个数组进行冒泡排序,所以把它写成一个方法:
两要素:
a:返回类型:void
b:参数列表:int[] arr
public class ArrayTest1 { public static void main(String[] args) { //建立一个数组
int[] arr = {23,11,45,78,1,42}; System.out.println("数组排序前:");
getArray(arr);
//调用排序方法
bubbleSort(arr);
System.out.println("\n数组排序后:");
getArray(arr); } //定义冒泡排序的方法
public static void bubbleSort(int[] arr){
//确定要进行比较的次数
// arr.length - 1是为了防止数据越界
// arr.length - 1 - x是为了减少比较的次数
for(int x = 0;x < arr.length - 1; x++){
//定义每次要比较的数据随着比较的次数的减少而减少
for(int y = 0;y < arr.length - 1 - x ; y++){
//每次比较后,要对每个数组里的元素进行比较,并排序
if(arr[y] > arr[y+1]){
//进行排序
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
//排序完毕后,对数组进行遍历
public static void getArray(int[] arr){
System.out.print("[");
for(int z = 0;z < arr.length; z++){
if(z == arr.length - 1){
System.out.print(arr[z]+"]");
}
else{
System.out.print(arr[z]+",");
}
}
}
}
2、 数组排序之选择排序:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
分析:
A:首先是0索引上的数据依次跟后面各个索引上的数据进行比较,
直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,
接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较
例如:{22,11,13,10} 22跟11比后,变成{11,22,13,10},接着11继续跟13、10比较,遇到10后,变成{10,22,13,11}
也就是说,进行完A后,0索引上的数据肯定是这个数组上最小的数据
B:接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
C:跟B一样,就这样进行下去,知道全部都比较完毕。
D:总结上面,得出总共需要进行几次A步骤的次数:
如果是5个数据的数组的话,就一共需要比较arr.length(4)次,若从0开始计数,则是 4-1 = 3次
而每次比较时,所参与的索引的数据是不一样的:
第一次时,是0和1以及后面的数据比较;
第二次时,是1和2以及后面的数据比较
...
E:从D得出
for(int x = 0; x< arr.length - 1; x++){
for(int y = x+1; y < arr.length ;y++){
}
}
F:用E的方法得出排序后的数组后,再进行数组遍历输出。
G:排序和遍历都用方法来表示,以方便以后的使用
a:返回类型:无,void
b:参数列表:int[] arr
public class ArrayTest2 { public static void main(String[] args) {
//首先定义一个数组
int[] arr = {23,12,14,11,30,54};
//调用遍历方法,输出排序前的数组
System.out.println("进行排序前的数组:");
printArray(arr);
//调用排序和遍历方法,输出排序完成后的数组
System.out.println("\n排序完成后的数组:");
choose(arr);
printArray(arr); }
//定义排序方法
public static void choose(int[] arr){
//定义进行A步骤的次数
for(int x = 0; x < arr.length - 1; x ++ ){
//定义每次参与比较的数据个数
for(int y = x + 1;y < arr.length ; y++){
//进行数据的比较
if( arr[x] > arr[y]){
//对数据进行排序
int temp = arr[y];
arr[y] = arr[x];
arr[x] = temp;
}
}
}
} //定义遍历方法
public static void printArray(int[] arr){
System.out.print("[");
for(int x= 0; x< arr.length ;x++){
if(x == arr.length-1){
System.out.print(arr[x]+"]");
}
else{
System.out.print(arr[x]+",");
}
}
} }
java12-6 冒泡排序法和选择排序法的更多相关文章
- python中对列表元素大小排序(冒泡排序法和选择排序法)
前言:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的两种排序算法,选择排序法 ...
- C语言实现冒泡排序法和选择排序法代码参考
为了易用,我编写排序函数,这和直接在主调函数中用是差不多的. 我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误! 冒泡排序法 void sort(int * ar, ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
- php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...
- java:选择排序法对数组排序
最近想练一练Java的算法,然后碰到LeetCode上一道从排序数组删除重复项的小题,刚开始没看到是从排序数组中,就乱写,其实要是排序树组,就比乱序的感觉上好写多了.然后就想回顾下冒泡法对数组排序,凭 ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较
我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...
- c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...
随机推荐
- Linux学习笔记(整理记录)
1.安装 (1):安装网址:http://www.jb51.net/os/78318.html 2.鸟哥的Linux命令学习 (1):显示系统目前所支持的语言:echo $LANG (2):修改语言成 ...
- CSS之绝对定位那些事
1.垂直居中 有时我们会使用margin: 0 auto;作居中使用.但有的时候我们需要垂直居中,例如在div里面垂直居中显示一张加载中的gif图. 下面这种写法就可以完美实现: 垂直居中的子容器 { ...
- 解决Win10服务主机本地系统网络受限
换成win10有一段时间了,界面风格比win7好看,但有部分程序还是不兼容,还好用虚拟机可以将就解决.但有一个问题一直困扰了我好久,今天终于解决了. 问题描述 在进程中,服务主机:本地系统(网络受限) ...
- Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
Atitit.工作流系统的本质是dsl 图形化的dsl 4gl 1. 工作流系统的本质是dsl 图形化的dsl 4gl1 2. 为什么每个项目系统都需要工作流1 3. 工作流dsl与java .n ...
- redis实现主从复制-单机测试
一.redis实现主从复制-单机测试1.安装redis tar -zxvf redis-2.8.4.tar.gzcd redis-2.8.4make && make install2. ...
- SVN Can't open file 'xxx':Premission denied
换了一台电脑,重新搭建本地svn服务器的时候,服务器搭起来了,但是用Cornerstone往服务器上传工程的时候报错 报错有以上两种,都是因为文件权限的限制 解决方法 第一种报错 1.在Finder里 ...
- 实验:传输层:UDP协议 学习笔记
一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- Js中获取对象的所有key值
假如现在有一个对象 var obj = { A:2 ,B:"Ray" ,C:true ,D:function(){} } 如果想遍历对象obj中的所有键值,一般是用以下方式 for ...
- easyui的datagrid实例实现
功能要求如图所示: function Loading() { var editRow = undefined;//保存行的索引 var query= $("#myform").se ...