Java实现选择排序和冒泡排序
1 问题描述
给定一个可排序的n元素序列(例如,数字、字符和字符串),将它们按照非降序方式重新排列。
2 解决方案
2.1 选择排序原理简介
选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素和第一个元素交换位置;然后,我们从第二个元素开始扫描剩下的n-1个元素,找到这n-1个元素中的最小元素,将最小元素和第二个元素交换位置;然后从第三个元素开始扫描…一般来说,就是从第i个元素开始扫描,找到第n-i+1个元素中的最小元素,将最小元素与第i个元素交换位置。这样,在进行n-1次遍历后,该列表就排好序了。
package com.liuzhen.chapterThree;
public class SelectionSort {
public static void getSelectionSort(int[] a){
int min = 0; //用于存放n-i序列中最小元素序号
int temp = 0; //交换数组元素值的中间变量
//打印输出未排序前数组序列
System.out.print("排序前: ");
for(int p = 0;p < a.length;p++)
System.out.print(a[p]+"\t");
System.out.println();
for(int i = 0;i < a.length-1;i++){
min = i;
for(int j = i+1;j < a.length;j++){
if(a[j] < a[min])
min = j;
}
//交换a[i]和a[min]的值
temp = a[i];
a[i] = a[min];
a[min] = temp;
//打印输出每一次选择排序结果
System.out.print("排序第"+(i+1)+"趟:");
for(int p = 0;p < a.length;p++)
System.out.print(a[p]+"\t");
System.out.println();
}
}
public static void main(String args[]){
int[] a = {89,45,68,90,29,34,17};
getSelectionSort(a);
}
}
运行结果:
排序前: 89 45 68 90 29 34 17
排序第1趟:17 45 68 90 29 34 89
排序第2趟:17 29 68 90 45 34 89
排序第3趟:17 29 34 90 45 68 89
排序第4趟:17 29 34 45 90 68 89
排序第5趟:17 29 34 45 68 90 89
排序第6趟:17 29 34 45 68 89 90
2.3 冒泡排序原理简介
我们从列表的第一个元素开始,比较列表中相邻的两个元素,如果第一个元素大于第二元素,则交换这两个元素的位置,否则就从第二个元素位置开始重复上一步操作。重复多次以后,最大的元素就“沉到”列表的最后一个位置。这样一直做,直到n-1遍以后,该列表就排好序了。
package com.liuzhen.chapterThree;
public class BubbleSort {
public static void getBubbleSort(int[] a){
int temp;
//打印输出未排序前数组序列
System.out.print("排序前: ");
for(int p = 0;p < a.length;p++)
System.out.print(a[p]+"\t");
System.out.println();
for(int i = 0;i < a.length-1;i++){
for(int j = 0;j < a.length-1-i;j++){
if(a[j+1] < a[j]){
//交换a[j]和a[j+1]的值
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
//打印输出每一次选择排序结果
System.out.print("排序第"+(i+1)+"趟:");
for(int p = 0;p < a.length;p++)
System.out.print(a[p]+"\t");
System.out.println();
}
}
public static void main(String args[]){
int[] a = {89,45,68,90,29,34,17};
getBubbleSort(a);
}
}
运行结果:
排序前: 89 45 68 90 29 34 17
排序第1趟:45 68 89 29 34 17 90
排序第2趟:45 68 29 34 17 89 90
排序第3趟:45 29 34 17 68 89 90
排序第4趟:29 34 17 45 68 89 90
排序第5趟:29 17 34 45 68 89 90
排序第6趟:17 29 34 45 68 89 90
Java实现选择排序和冒泡排序的更多相关文章
- Java中选择排序,冒泡排序,插入排序,快速排序
一:冒泡法排序 //冒泡排序 注:从小到大排 //特点:效率低,实现简单 //思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素. 这只是冒泡排序 ...
- Java实现选择排序以及冒泡排序
//排序 选择排序 数组中每个元素都进行比较 public class Test { public static void main(String[] args) { int[] arr = {12, ...
- Java基础——选择排序、冒泡排序
1.选择排序 原理是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 代码演示: public class Test3 { public sta ...
- java 选择排序、冒泡排序、折半查找
public class SortAndSelectDemo{ public static void main(String[] args){ int[] arr = {3, 5, 17, 2, 11 ...
- java 选择排序与冒泡排序
选择排序与冒泡排序的特点与区别 ++++++++++++++++++++++++++++++++++++++++++++++ 选择排序 这一种简单的排序方法,它的基本思想是:R[n]第一次从R[0]~ ...
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- Java-数据结构与算法-选择排序与冒泡排序
Java 选择排序与冒泡排序 1.DataSorter.java public class DataSorter { //冒泡排序法 //主要思路:按升序排序,数组元素两两比较,大的立即排后面 pub ...
- 算法——蛮力法之选择排序和冒泡排序c++实现
这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出 ...
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
随机推荐
- 基于Nettty打造自己的MVC服务器
最近开始折腾Netty,体验下NIO编程.既然学习了,就要做点东西出来,要不然不容易掌握学到的东西.在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sam ...
- 向大家介绍我的新书:《基于股票大数据分析的Python入门实战》
我在公司里做了一段时间Python数据分析和机器学习的工作后,就尝试着写一本Python数据分析方面的书.正好去年有段时间股票题材比较火,就在清华出版社夏老师指导下构思了这本书.在这段特殊时期内,夏老 ...
- python mysql数据库基本操作方法
实现:使用Python实现用户登录,如果用户存在(数据库表中存在)则登录成功(假设该用户已在数据库中) import pymysql username = input('输入用户名:').strip( ...
- MySQL++:liunx 安装 MySQL
第一步: 1):下载mysql安装包:这里选择下载版本 5.6.33,通用版,linux下64位 http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql- ...
- ⚠ | 不要再使用 markdown 主题了!
前置 我在很久之前就发现了使用第三方 markdown 主题将产生一个的问题,今日在社区发现依然有人写文章来推荐这种做法.接下来我告诉你为什么最好不要这样做以及分享一些 markdown 技巧.若有不 ...
- [Unity UGUI序列帧]简单实现序列帧的播放
在使用序列帧之前需要准备好序列帧的图集,打图集的操作参考 [Unity UGUI图集系统]浅谈UGUI图集使用 准备好序列帧图集,序列帧的播放原理就是获取到图集中的所有图片,然后按照设置的速度按个赋值 ...
- python操作excel----openpyxl模块
openpyxl模块支持.xls和.xlsx格式的excel创建,但是只支持.xlsx格式的读取操作,不支持.xls的读取(可以使用xlrd模块来读取,写入操作也可使用xlwt模块),也可使用pand ...
- Django认证系统之自带auth_user表操作
Django自带auth_user表操作: views.py from django.contrib import auth#引入auth模块 from django.contrib.auth.m ...
- 王艳 201771010127《面向对象程序设计(Java)》第四周学习总结
第一部分:理论知识. 第四章:对象与类 4.1:类与对象的概念. 类:是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例. 对象:想要使用oop,一定要清楚对象的三个特性: 1)对象的行为:对 ...
- 基于java的雷电游戏
基于java的雷电游戏基本功能包括:敌方飞机随机飞行.我方飞机手动控制飞行,射击比拼,游戏闯关等.本系统结构如下: (1)雷电游戏状态调整功能: 在游戏启动时,游戏会自动进行初始化的验证. 若初始化成 ...