Java基本排序实现--插入排序,选择排序,冒泡排序
2016-05-10 10:30
706 查看
一、插入排序
//插入排序算法的伪代码
//insertionsort(data[]){
// fori=1 to data.length-1
// temp = data[i];
// 将所有大于temp的元素data[i]移动一个位置
// 把temp放到正确的位置上
//}
public static void main(int[] data) {
for(int i=1,j; i<data.length; i++){
int temp = data[i];
for(j=i;j > 0 && temp < data[j-1]; j--)
data[j] = data[j-1];
data[j] = temp;
}
}
冒泡排序在平均情况下的复杂度为O(n^2),为稳定的排序方法。
二、选择排序
选择值最小的元素并将它和每次第一个位置上的元素交换。
//选择排序的伪代码
//selectionsoft(data[])
// for i = 0 to data.length-2
// 从data[i],...,data[data.length-1]中选择取最小的元素;
// 将它和data[i]交换;
public void selectionsoft (int[] data) {
int i,j,least;
if(data == null || data.length <= 0){
return;
}
for(i = 0; i < data.length -1; i++){
for(j = i+1, least = i; j < data.length; j++){
//least=i;表示将当前位置的元素定义为最小值的下标
//如果有小于当前最小值的关键字
if(data[least] > data[j])
//将此关键字的下标赋值给least
least = j;
}
if(i != least){//如果least不等于i,说明找到最小值
int tmp = data[least];
data[least] = data[i];
data[i] = tmp;
}
}
}
选择排序:最好情况是数组有序,无需交换;最坏情况,最大元素在首位置,其他元素有序。平均情况下的复杂度为O(n^2),属于不稳定排序。
三、冒泡排序
这里指的是冒最小泡,即先选择最小元素。
//冒泡排序的伪代码
//bubblesort(data[])
// for i to data.length-2
// for j = data.lengt-1 downto j+1
// 如果顺序错误就交换j和j-1位置上的元素;
public void bubblesort1(int[] data){
int tmp = 0;
for(int i = 0; i < data.length; i++){//外层循环从0到data.length-1
for(int j = data.length-1; j > i; --j){//内层循环从大于i位置后的元素中选择
if(data[j] < data[j-1]){
tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
}
}
}
}
每次寻找剩余子数组中的最小值,并排序。
冒泡排序:平均时间复杂度为O(n^2),属于稳定的排序。
四、总结
比较次数:冒泡排序近似是插入排序的2倍,和选择排序相同。
移动次数:冒泡排序和插入排序相同,是选择排序的n倍。
//插入排序算法的伪代码
//insertionsort(data[]){
// fori=1 to data.length-1
// temp = data[i];
// 将所有大于temp的元素data[i]移动一个位置
// 把temp放到正确的位置上
//}
public static void main(int[] data) {
for(int i=1,j; i<data.length; i++){
int temp = data[i];
for(j=i;j > 0 && temp < data[j-1]; j--)
data[j] = data[j-1];
data[j] = temp;
}
}
冒泡排序在平均情况下的复杂度为O(n^2),为稳定的排序方法。
二、选择排序
选择值最小的元素并将它和每次第一个位置上的元素交换。
//选择排序的伪代码
//selectionsoft(data[])
// for i = 0 to data.length-2
// 从data[i],...,data[data.length-1]中选择取最小的元素;
// 将它和data[i]交换;
public void selectionsoft (int[] data) {
int i,j,least;
if(data == null || data.length <= 0){
return;
}
for(i = 0; i < data.length -1; i++){
for(j = i+1, least = i; j < data.length; j++){
//least=i;表示将当前位置的元素定义为最小值的下标
//如果有小于当前最小值的关键字
if(data[least] > data[j])
//将此关键字的下标赋值给least
least = j;
}
if(i != least){//如果least不等于i,说明找到最小值
int tmp = data[least];
data[least] = data[i];
data[i] = tmp;
}
}
}
选择排序:最好情况是数组有序,无需交换;最坏情况,最大元素在首位置,其他元素有序。平均情况下的复杂度为O(n^2),属于不稳定排序。
三、冒泡排序
这里指的是冒最小泡,即先选择最小元素。
//冒泡排序的伪代码
//bubblesort(data[])
// for i to data.length-2
// for j = data.lengt-1 downto j+1
// 如果顺序错误就交换j和j-1位置上的元素;
public void bubblesort1(int[] data){
int tmp = 0;
for(int i = 0; i < data.length; i++){//外层循环从0到data.length-1
for(int j = data.length-1; j > i; --j){//内层循环从大于i位置后的元素中选择
if(data[j] < data[j-1]){
tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
}
}
}
}
每次寻找剩余子数组中的最小值,并排序。
冒泡排序:平均时间复杂度为O(n^2),属于稳定的排序。
四、总结
比较次数:冒泡排序近似是插入排序的2倍,和选择排序相同。
移动次数:冒泡排序和插入排序相同,是选择排序的n倍。
相关文章推荐
- java异常处理相关
- 写一个自己的URL解码帮助类(DecodeUtil.java)
- spring mvc在注解开发下表单提交到不了Controller方法的解决手段
- Java获取服务器根目录
- 对java中MessageFormat类的一个简单扩展
- Terrocotta - 基于JVM的Java应用集群解决方案
- java 拼接子串的方式做字符串替换生成json
- JAVA扫描包
- Java基础(1)开发环境
- 纯Java获得本地MAC地址
- java开发常用类
- 69道Spring面试题和答案
- resource: *********.hbm.xml not found 这个错误完美解决
- SVN使用教程之-分支/标记 合并 subeclipse
- Java BIO、NIO、AIO基础概念
- 使用Spring进行远程访问与Web服务[转]
- java集合类深入分析之List篇
- java-连接access
- [Java视频笔记]day20
- [javase]IO之InputStream