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 冒泡排序是两个元素相互比较,找到最小值,然后冒泡到最后,代码如下:
随机推荐
- 在头文件中声明class 类 与 include类所在的头文件区别---理解
在头文件中声明class 类 与 include类所在的头文件的理解: 在头文件中,声明类 它告诉编译器:存在这样的类.而实际的类则可以位于同一个编译单元中,也可以放在其他编译单元中.没有这个类原型, ...
- 使用kibana来进行ElasticSearch的信息查询检索
大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括ElasticSearch(数据存储.快速查询).logstash(日 ...
- crm 03--> crm与权限结合
---恢复内容开始--- 1:先分组 2:给权限分组 3:具体的权限(即设计url) 二:制作左侧菜单,显示当前用户拥有的权限 关于项目下的templates里的HTML查找顺序 先从根目录找,找不到 ...
- 软件包 com.baidu.location
http://developer.baidu.com/map/loc_refer/index.html?com/baidu/location/package-summary.html
- BZOJ4556 Tjoi2016&Heoi2016 字符串【后缀自动机+倍增+线段树合并】
Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开 ...
- Django 向数据表中添加字段方法
在模型order中添加字段discount字段,并给予初始值0 方法: 先在models.py中修改模型 添加 discount = models.DecimalField(max_digits=8, ...
- pat甲级 1155 Heap Paths (30 分)
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- LeetCode 760. Find Anagram Mappings
原题链接在这里:https://leetcode.com/problems/find-anagram-mappings/description/ 题目: Given two lists Aand B, ...
- nginx-unit docker 运行以及php &&golang 简单使用
备注: nginx unit nginx 开源的新的nginx 开发平台,但是说白了,个人感觉一般,而且官方文档也不是很好, api 接口目前暂时文档比较....,以前写过虚拟机&& ...
- js写的体彩足球预测分析
最近室友在玩世界杯的预测,我顺手写点分析:下面直接给出代码,很简单的,拷贝代码直接存为html文件就可以了.---------mq0036 说明下:需要你自己去找个Jquery引用到当前页面就可以了 ...