您的位置:首页 > 编程语言 > Java开发

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倍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: