ArraySort--冒泡排序、选择排序、插入排序工具类demo
public class ArraySort { private long[] a;
private int nElems;
public ArraySort(int max){
a=new long[max];
nElems=0;
}
public void insert(long value){
a[nElems]=value;
nElems++;
}
public void display(){
for(int j=0;j<nElems;j++){
System.out.print(a[j]+" ,");
}
System.out.println("");
}
public void swap(int one,int two){
long temp=a[one];
a[one]=a[two];
a[two]=temp;
}
/**
* @Title: bubbleSort
* @Description: 冒泡排序
* @return: void
*/
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out>1;out--)//外层循环(out指针向数组左方移动)
{
for(in=0;in<out;in++)//内层循环(in指针向右方移动)
{
if(a[in]>a[in+1])//不是左小右大的正确顺序?
{
swap(in,in+1);//交换它们
}
}
}
}
/**
*
* @Title: selectSort
* @Description: 选择排序
* @return: void
*/
public void selectSort(){
int out,in,min;
for(out=0;out<nElems-1;out++)//外层循环
{
min=out;//将最小值指定为out指针所指位置数值
for(in=out+1;in<nElems;in++)//内层循环
{
if(a[in]<a[min])//当前in指针的值比min所指的最小值更小吗?
min=in;//将最小值重新指定为当前in指针所指数据
}
swap(out, min);//交换out和min的值
}
}
/**
* @Title: insertSort
* @Description: 插入排序
* @return: void
*/
public void insertSort(){
int in,out;
long temp;
for(out=1;out<nElems;out++)//out是左边有序部分和右边无序部分的分界线
{
temp=a[out];//将分界点数据保存到临时变量中
in=out;//从out开始依次向右移动数据
while(in>0 && a[in-1]>=temp)//直到移动到一个比out更小的数据时
{
a[in]=a[in-1];//将数据向右移动一个位置
--in;//in指针左移一个位置
}
a[in]=temp;
}
} public static void main(String[] args) {
int maxSize=10;
ArraySort arr;
arr=new ArraySort(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(45);
arr.insert(55);
arr.insert(23);
arr.insert(86);
arr.insert(12);
arr.insert(00);
arr.insert(65);
arr.insert(34);
arr.display();
arr.insertSort();
arr.display();
arr.bubbleSort();
arr.display();
arr.selectSort();
arr.display();
}
/**
* 排序算法思路描述: public void bubbleSort(), 外层for循环的计数器out从数组的最后开始,即out等于nElems-1,每经过一次循环out减一。下标大于out的数据项都已经是拍好序的了。变量out在每完成一次内部循环(计数器为in)后就左移一位,因此算法就不再处理那些已经排好序的数据了。 内层for循环计数器in从数组的最开始算起,即in=0,每完成一次内部循环体加一,当它等于out时结束一次循环。在内层for循环体中,数组下标为in和in+1的两个数据项进行比较,如果下标为in的数据项大于下标为in+1的数据项,则交换两个数据项。 public void selectSort(), 外层循环用循环变量out,从数组开头开始(数组下标为0)向高位增长。内层循环用循环变量in,从out所指位置开始,同样是向右移位。 在每一个in的新位置,数据项a[in]和a[min]进行比较。如果a[in]更小,则min被赋值为in的值。在内层循环的最后,min指向最小的数据项,然后交换out和min指向的数据向。 public void insertSort(), 在外层的for循环中,out变量从1开始,向右移动。它标记了未排序部分的最左端的数据。而内层的while循环中,in变量从out变量开始,向左移动(复制),直到temp变量小于in所指的数组数据项,或者它已经不能再往左移动为止。While循环的每一趟都向右移动了一个已排序的数据项。 几种排序的比较: 冒泡排序:很容易写,但是一般不用,数据量很小时还是有些应用价值的。 选择排序:虽然交换次数降到最低,但比较次数依然很大,当数据量小,且交换相对于比较更耗时的情况下,可以应用它。 插入排序:数据量小或者基本有序时,插入算法是三者中最好的选择。相对于随机数据,它一般比冒泡快一倍,比选择也略快一些。因为它移动数据比交换数据耗费要小。 */
}
ArraySort--冒泡排序、选择排序、插入排序工具类demo的更多相关文章
- 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- 算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
- 过三关 Java冒泡排序选择排序插入排序小练习
材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...
- 冒泡排序 & 选择排序 & 插入排序 & 希尔排序 JavaScript 实现
之前用 JavaScript 写过 快速排序 和 归并排序,本文聊聊四个基础排序算法.(本文默认排序结果都是从小到大) 冒泡排序 冒泡排序每次循环结束会将最大的元素 "冒泡" 到最 ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- C++中的冒泡排序,选择排序,插入排序
最简单的插入排序:思想,两两之间比较,时间复杂度o(n^2) void bubblesort(vector<int>&vec, int n) { if (&vec==NUL ...
- PHP冒泡排序,选择排序,插入排序
1 冒泡排序是两个元素相互比较,找到最小值,然后冒泡到最后,代码如下:
随机推荐
- Shell 命令行批量处理图片文件名
Shell 命令行批量处理图片文件名 从网上下载了一堆图片,有的是*.jpg的,有的是*.jpeg的.并且文件名有长有短,很是糟心.因此,我想把这些文件给全部整理好,当然是用shell来处理啦! 说干 ...
- mongodb 使用
一.下载 MongoDB的官网是:http://www.mongodb.org/ MongoDB最新版本下载在官网的DownLoad菜单下:http://www.mongodb.org/downloa ...
- HttpUrlConnection使用Get和Post访问服务器的工具类(一)
首先我们有一个返回响应的接口HttpCallBackListener public interface HttpCallbackListener { void onFinish(String resp ...
- js之数码时钟加随机变色
HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- python的文件编码注释
在python源文件的第一行或第二行写入如下内容: # -*- coding:gbk -*- # 设置源文件编码格式为gbk 或 # -*- coding:utf-8 -*- # 设置源文件编码格式为 ...
- ubuntu16.04 LTS grafana安装与启动
1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...
- Java项目中使用Log4J
Log4J下载 官网:http://logging.apache.org/log4j/ Log4J 1.2下载地址:http://logging.apache.org/log4j/1.2/downlo ...
- HDU2161
解题思路:判断素数模板题. #include<cstdio> #include<cstring> #include<algorithm> using namespa ...
- native 方法列表说明
方法列表说明 关于static const JNINativeMethod method_table[]方法列表的原型如下: typedef struct { const char* name; co ...
- 用python验证蒙提霍尔问题
最初看到这个问题是初中的时候买了一本有关数学谜题的书里面概率论的一张的课后拓展就是说到三门问题,当时作为一个扩展阅读看了一下,里面说到了一个世界智商最高的女人秒杀了美国一大群的数学高材生的精彩故事(比 ...