java冒泡排序、选择排序、插入排序算法的核心思想及其比较
2013-08-23 19:31
323 查看
上代码:
package arithmetic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Bubble_Arithmetic {
//冒泡排序的核心思想:若有n个数据排序,从第0个数据开始,依次比较第0个数据与第一个数据,若第0个大于第一个则交换两者的位置,若小于或等于第一个,不交换,接
//着比较第一个与第二个数据,依此类推,直至所有的数据从前到后是按照以小到大的顺序排列的。——完毕。
public static List bubble(List<Integer> list){
int temp=0;
for (int i = list.size()-1; i >=0; i--) {
for (int j = 0; j < i; j++) {
if(list.get(j)>list.get(j+1)){
temp=list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
return list;
}
冒泡排序的效率:O(N*N),比较N*N/2,交换N*N/4;
//选择排序核心思想:有n个数据,第0个数据标记为min,用out来标记左边未排序的数据使用in标记未排序的第一个数据,依次与min比较,如果比min小,则将该数据标记
//为min,当第一轮比较完后,最终的min与out标记数据交换,依次类推。
public static List SelectSort(List<Integer> list){
int min,in,out,temp;
for (out = 0; out < list.size()-1; out++) {
min=out;
for (in = out+1; in < list.size(); in++) {
if(list.get(in)<list.get(min)){
min=in;
}
}
temp=list.get(out);
list.set(out, list.get(min));
list.set(min, temp);
}
return list;
}
选择排序的效率:O(N*N),比较N*N/2,交换<N;与冒泡相比,比较次数没有明显改变,但交换次数明显减少许多。
//插入排序核心思想:部分数据有序的情况下,使用out标记第一个无序的数据,将其提取保存到一个中间temp中,使用in标记空位置,依次比较temp中的值与in-1的值,若in值大于temp的值,则后移,直到遇到第一个比temp小的值,在其下一个位置插入;
public static List InsertionSort(List<Integer> list){
List<Integer> resultList= new ArrayList<Integer>(list.size());
int[]result=new int[list.size()];
int in,out;
for (out = 0; out < list.size(); out++) {
int temp= list.get(out);
in=out;
while(in >0 && list.get(in-1)>temp){
result[in]= list.get(in-1);
--in;
}
result[in]=temp;
}
for (int i = 0; i < result.length; i++)
{
System.out.print(result[i]);
System.out.print(" ");
}
System.out.println("size:"+result.length );
return resultList;
}
插入排序的效率:O(N*N),比较N*N/4,复制N*N/4;插入排序在随机数的情况下比冒泡快一倍,比选择稍快;在基本有序的数字中,插入几乎只需O(N);在逆序的情
//况下,不必冒泡快。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你想排序的整数,以分号;分隔:结束:回车");
List<String> list=new ArrayList<String>();
do{
String line=scanner.nextLine();
if(line.isEmpty()){
break;
}
list.addAll(Arrays.asList(line.split(";")));
}while(true);
List<Integer> list_Int=new ArrayList<Integer>();
for (String string : list) {
list_Int.add(Integer.parseInt(string.trim()));
}
list_Int=bubble(list_Int);
for (Integer integer : list_Int) {
System.out.print(integer);
System.out.print(" ");
}
}
}
package arithmetic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Bubble_Arithmetic {
//冒泡排序的核心思想:若有n个数据排序,从第0个数据开始,依次比较第0个数据与第一个数据,若第0个大于第一个则交换两者的位置,若小于或等于第一个,不交换,接
//着比较第一个与第二个数据,依此类推,直至所有的数据从前到后是按照以小到大的顺序排列的。——完毕。
public static List bubble(List<Integer> list){
int temp=0;
for (int i = list.size()-1; i >=0; i--) {
for (int j = 0; j < i; j++) {
if(list.get(j)>list.get(j+1)){
temp=list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
return list;
}
冒泡排序的效率:O(N*N),比较N*N/2,交换N*N/4;
//选择排序核心思想:有n个数据,第0个数据标记为min,用out来标记左边未排序的数据使用in标记未排序的第一个数据,依次与min比较,如果比min小,则将该数据标记
//为min,当第一轮比较完后,最终的min与out标记数据交换,依次类推。
public static List SelectSort(List<Integer> list){
int min,in,out,temp;
for (out = 0; out < list.size()-1; out++) {
min=out;
for (in = out+1; in < list.size(); in++) {
if(list.get(in)<list.get(min)){
min=in;
}
}
temp=list.get(out);
list.set(out, list.get(min));
list.set(min, temp);
}
return list;
}
选择排序的效率:O(N*N),比较N*N/2,交换<N;与冒泡相比,比较次数没有明显改变,但交换次数明显减少许多。
//插入排序核心思想:部分数据有序的情况下,使用out标记第一个无序的数据,将其提取保存到一个中间temp中,使用in标记空位置,依次比较temp中的值与in-1的值,若in值大于temp的值,则后移,直到遇到第一个比temp小的值,在其下一个位置插入;
public static List InsertionSort(List<Integer> list){
List<Integer> resultList= new ArrayList<Integer>(list.size());
int[]result=new int[list.size()];
int in,out;
for (out = 0; out < list.size(); out++) {
int temp= list.get(out);
in=out;
while(in >0 && list.get(in-1)>temp){
result[in]= list.get(in-1);
--in;
}
result[in]=temp;
}
for (int i = 0; i < result.length; i++)
{
System.out.print(result[i]);
System.out.print(" ");
}
System.out.println("size:"+result.length );
return resultList;
}
插入排序的效率:O(N*N),比较N*N/4,复制N*N/4;插入排序在随机数的情况下比冒泡快一倍,比选择稍快;在基本有序的数字中,插入几乎只需O(N);在逆序的情
//况下,不必冒泡快。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你想排序的整数,以分号;分隔:结束:回车");
List<String> list=new ArrayList<String>();
do{
String line=scanner.nextLine();
if(line.isEmpty()){
break;
}
list.addAll(Arrays.asList(line.split(";")));
}while(true);
List<Integer> list_Int=new ArrayList<Integer>();
for (String string : list) {
list_Int.add(Integer.parseInt(string.trim()));
}
list_Int=bubble(list_Int);
for (Integer integer : list_Int) {
System.out.print(integer);
System.out.print(" ");
}
}
}
相关文章推荐
- 选择排序的思想及其实现
- 冒泡排序(及其进阶——鸡尾酒排序)与选择排序的算法思想及具体事例
- 排序--简单选择排序思想及其代码实现
- 数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- Java对一维数组排序:冒泡,选择,插入,比较效率
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序
- java冒泡排序和选择排序示例
- C语言:两种简单的排序及其应用(选择排序和冒泡排序)
- 堆排序与直接选择排序的比较
- 选择排序跟冒泡排序的比较
- 冒泡、插入、选择排序及其改进
- 排序方法实现思想实验报告(选择排…
- Java冒泡排序和选择排序
- 初级排序之冒泡排序,插入排序,选择排序比较
- 各种排序方法及其比较
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 归并排序,插入排序,快速排序,冒泡排序,选择排序的思想
- [数据结构]用插入排序和选择排序的思想实现优先级队列
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排
- 各种内部排序方法的比较和选择