package Test1;
public class SortDemo {
/**
* 冒泡排序 数组角标从前往后走,大的数往后走1.
* 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr 待排序数组
*
*/
public static void Bubble(int[] arr){
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){//
//换位
swap(arr,j,j+1);
}
}
}
}
/**
* 冒泡排序第二种方法 数组角标从后往前遍历,小的数往前跑
* @param arr
*/
public static void Bubble2(int[] arr){
//两两比较,外围循环为长度减1
for(int i=0;i<arr.length-1;i++){
for(int j=arr.length-1;j>i;j--){
if(arr[j]<arr[j-1])
swap(arr,j,j-1);
}
}
}
/**
* 选择排序。基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr
*/
public static void select (int[] arr){
int min;//最小索引
for(int i=0;i<arr.length-1;i++){
min =i;//假设没轮的第一个元素师最小元素
//从假设的最小元素的下一元素开始循环
for(int j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min=j;
}
}
swap(arr,i,min);
}
}
/**插入排序,从小到大顺序排列
* 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置
* 使数列依然有序;直到待排序数据元素全部插入完为止。
* @param arr
*/
public static void InsertSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
//待插入的元素
int insertElem = arr[i+1];
for(int j=0;j<i+1;j++){
//找到第一个比待插入元素insertElem大的数
if(insertElem < arr[j]){
//j位后已有序元素往后移动一位
for(int x=i+1;x>j;x--){
arr[x]=arr[x-1];
}
//在j位插入insertElem
arr[j]=insertElem;
break;
}
}
}
}
/**
* 数组中两个元素交换位置
* @param arr
* @param x
* @param y
*/
public static void swap(int[] arr,int x,int y){
int temp = arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
/**
* 打印数组
* @param arr
*/
public static void sop(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
int[] arr = new int[]{5,2,1,22,14,7,9};
//冒泡排序
//Bubble(arr);
//选择排序
//select(arr);
//插入排序
InsertSort(arr);
sop(arr);
}
}
package Test1;
public class SortDemo {
/**
* 冒泡排序 数组角标从前往后走,大的数往后走1.
* 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr 待排序数组
*
*/
public static void Bubble(int[] arr){
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){//
//换位
swap(arr,j,j+1);
}
}
}
}
/**
* 冒泡排序第二种方法 数组角标从后往前遍历,小的数往前跑
* @param arr
*/
public static void Bubble2(int[] arr){
//两两比较,外围循环为长度减1
for(int i=0;i<arr.length-1;i++){
for(int j=arr.length-1;j>i;j--){
if(arr[j]<arr[j-1])
swap(arr,j,j-1);
}
}
}
/**
* 选择排序。基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr
*/
public static void select (int[] arr){
int min;//最小索引
for(int i=0;i<arr.length-1;i++){
min =i;//假设没轮的第一个元素师最小元素
//从假设的最小元素的下一元素开始循环
for(int j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min=j;
}
}
swap(arr,i,min);
}
}
/**插入排序,从小到大顺序排列
* 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置
* 使数列依然有序;直到待排序数据元素全部插入完为止。
* @param arr
*/
public static void InsertSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
//待插入的元素
int insertElem = arr[i+1];
for(int j=0;j<i+1;j++){
//找到第一个比待插入元素insertElem大的数
if(insertElem < arr[j]){
//j位后已有序元素往后移动一位
for(int x=i+1;x>j;x--){
arr[x]=arr[x-1];
}
//在j位插入insertElem
arr[j]=insertElem;
break;
}
}
}
}
/**
* 数组中两个元素交换位置
* @param arr
* @param x
* @param y
*/
public static void swap(int[] arr,int x,int y){
int temp = arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
/**
* 打印数组
* @param arr
*/
public static void sop(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
int[] arr = new int[]{5,2,1,22,14,7,9};
//冒泡排序
//Bubble(arr);
//选择排序
//select(arr);
//插入排序
InsertSort(arr);
sop(arr);
}
}
分享到:
相关推荐
这个程序根据冒泡排序从大到小,从小到大的把数组里的元素进行了排序,程序思想很清晰
1)数组的基本操作,包括创建数组,填充数组,访问数组,拷贝数组,数组排序,数组查找。 2)编写一个猜密码的小程序,规则如下:程序首先产生一个三位数的密码,例如“025”,用户每次输入一个四位数来猜密码,程序...
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/29 页 1 跟我学 Java 面向对象程序设计技术及应用——应用冒泡排序算法实 现数组元素排序的 Java 程序实现示例 1.1 ...
这个c/c++小程序的功能是可以让用户从键盘输入数组长度和元素个数, 实现数组元素从大到小,或者从小到大排序,实现冒泡排序的算法.主要涉及到的c/c++的语法有数组/动态内存分配等语法
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
求1+2!+3!+...+20!的和 利用递归方法求5!。 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大...对10个数进行排序 求一个3*3矩阵对角线元素之和
请在DOS命令窗口里编译运行该程序 dos下相关命令 编译:javac 文件名.java 运行:java 文件名 此处填写数字(每个数字要用空格隔开)
、编写一个Java程序,定义一个2行3列的整型二维数组,对数组中每一个元素赋值一个0~100的随机整数,然后分别对第一行和第二行进行排序并输出结果。 提示:产生0~100的随机整数:(int)Math.random()*100。 2、编写一...
计算机程序设计java语言数字排序问题 题目:已知数据文件IN10.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上...
泡泡排序使用Java,此程序会提示用户输入10个数字,然后使用冒泡排序(或交换排序)来打印数字数组,其值从最小到最大。
firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 ...
实例040 使用直接插入法对数组排序 59 实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认...
算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
4.2 实验1 数组排序 4.3 实验2 鸽巢原理的模拟 4.4 实验3 矩阵相乘问题 4.5 实验4 "速算24"游戏 第5章 类和对象 5.1 预备知识 5.2 实验1 对象的创建和使用 5.3 实验2 类的静态成员与实例成员 5.4 实验3 变量的...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
* 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //...
全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、递归、进阶排序、二叉树、红黑树、哈希表及图形等知识。附录中则提供了运行专题Applet和例程、相关书籍和问题解答。本书提供了学完一门编程...
Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序...