重新温习数据结构二:简单排序
来源:互联网 发布:去国外翻译软件 编辑:程序博客网 时间:2024/06/13 12:30
这里并没有给出完整的例子,只是一些代码块.我说的是最核心的一些部分.
1、冒泡排序,这应该是性能最差的一种排序,不提倡用.
public void bubbleSort()
{
int out, in;
for(out=nElems-1; out>1; out--) // 外层的循环,nElems是数组的大小
for(in=0; in<out; in++) // 里面层的循环
if( a[in] > a[in+1] )
swap(in, in+1); // 交换两个数
}
交换的方法:
private void swap(int one, int two)
{
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
小结:冒泡排序的交换和比较操作的次数都和N2成正比,排序需要O(N2)的时间级别.
2、选择排序的算法:
public void selectionSort()
{
int out, in, min;
for(out=0; out<nElems-1; out++) // 外层的循环,nElems是数组的大小
{
min = out; //最小值设为min
for(in=out+1; in<nElems; in++) // 里面层的循环
if(a[in] < a[min] ) // 如果有更小的值
min = in;
swap(out, min); // 交换
}
}
小结:选择排序与冒泡排序执行了相同次数的比较N*(N-1)/2。当N值比较大时,比较的次数是主要,这时候采用选择排序性能也不好;当N值比较小的时候,选择排序的性能还是比较好的.
3、插入排序:性能比冒泡排序,选择排序好,在局部有序的情况下,插入排序的性能很好.
public void insertionSort()
{
int in, out;
for(out=1; out<nElems; out++)
{
long temp = a[out]; // 标记一下
in = out;
while(in>0 && a[in-1] >= temp) // 直到有一个值比temp小的
{
a[in] = a[in-1]; // 移动出一个空位
--in;
}
a[in] = temp; // 插入这一个值temp
}
}
小结:如果数组是基本有序或是有序了,这时候用插入排序只需要O(N)的时间。但如果对于逆序的数据,性能并不比冒泡排序快,这一点需要注意.
下一次会介绍多几种排序的,有空且心情好的时候再过来写写。
- 重新温习数据结构二:简单排序
- 重新温习数据结构一:数组
- 数据结构温习 排序算法
- 选择排序算法重新温习
- Java数据结构与算法《二》简单排序
- Servlet重新温习,cookie
- 数据结构与算法(二)冒泡&&插入&&选择 简单排序
- 重新温习java基础(1)
- java重新温习基础笔记
- 重新温习1--数学归纳法
- 温习一下数据结构
- 数据结构----简单选择排序
- 数据结构-简单排序
- 数据结构简单选择排序
- 温习快速排序
- 冒泡排序的温习
- 希尔排序温习~~
- 快速排序温习
- log4j配置详解 --eako的专栏
- 在线手册大全
- 深度剖析E680G开发一.所谓的交叉编译环境
- myeclipse 中的 uml 中文问题
- 微软新一代信息系统架构大转型
- 重新温习数据结构二:简单排序
- QT开发教程-概述
- 一个无刷新的二级联动下拉框
- 图片路径问题解决方案
- 9-12 测试生成组工作报告 (by snail)
- 怎么通过sql语句访问另外一个库的内容
- 获取其他进程中“Internet Explorer_TridentCmboBx”的内容
- c++学习书籍推荐
- jsp+tomcat+mysql+sevlet+javabean配置全过程