您的位置:首页 > 其它

经典算法:冒泡排序和选择排序

2011-10-19 22:11 323 查看
哎,就这样吧,忙来忙去才测试了两个排序算法,还是自己太笨了,数据结构是个好东西,可以学到很多东西呢,以后要好好的认真的学习一下.

今天主要学习,或者说是复习的(因为以前是接触过这两个算法的)算法是冒泡排序和选择排序.

1.冒泡排序:冒泡排序的概念,想了老长时间,自己总也总结不出来,所以,最终还是搜了一下,在百度百科上是这样说的:

" 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。"

2. 选择排序: 在排序过程中,并不像冒泡排序那样,遇到比自己小的就进行交换,而是用一个中间量记录下遍历过程中遇到的最大值的索引,最后中间量max中存放的就是最大值,这个时候与高位进行交换.

同样也看一下百度百科中的概念吧:

"每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。"

至于为什么不稳定,俺也不知道呢还...

3.用一个小的程序实现了一下:

package com.xingyun.pi;

import java.util.Calendar;
import java.util.Date;

/**
* 实现冒泡排序的算法
* @author xingyunpi
*
*/
public class Sorts {
static int data[] = {5,2,6,8,1,3};//要排序的数组
public static void main(String args[]){
for(int i = 0; i < data.length; i++){
System.out.print(data[i]+",");
}
System.out.println("-----------原始");
int maopao[] = maopao(data);
for(int i = 0; i < data.length; i++){
System.out.print(maopao[i]+",");
}
System.out.println("-----------冒泡");
int xuanze[] = xuanze(data);
for(int i = 0; i < data.length; i++){
System.out.print(xuanze[i]+",");
}
System.out.println("-----------选择");
}

/**
* 数组data的第i个数和第j个数进行交换
* @param data
* @param i
* @param j
*/
public static void swap(int data[], int i, int j){
int temp;
temp = data[i];
data[i] = data[j];
data[j] = temp;
}

/**
* 冒泡排序:只要有一个大的,就交换一次
* @param data
* @return
*/
public static int[] maopao(int data[]){
for(int i = data.length -1; i > 0; i--){
for (int j = 0; j < i; j++){
if (data[j] > data[i]){
swap(data,i,j);
}
}
}
return data;
}
/**
* 选择排序:把最大的找出来才进行交换
* @param data
* @return
*/
public static int[] xuanze(int data[]){
for(int i = data.length - 1; i > 0; i--){
int max = 0;
for(int j = 0; j <= i; j++){
if(data[j] > data[max]){
max = j;
}
}
swap(data,i,max);
}
return data;
}

/**
* 打印当前时间,是为了比较各种排序的效率
*/
public static void printtime(){
Date time = Calendar.getInstance().getTime(); 
System.out.println(time.toString());
}
}


运行结果:

5,2,6,8,1,3,-----------原始

1,2,3,5,6,8,-----------冒泡

1,2,3,5,6,8,-----------选择

当然,运行的时候,冒泡和选择排序是分开来进行的.不过,都行都行的...只不过一块运行的话,选择排序中就已经把顺序排好了.

最后,俺知道英语不好,所以用的都是拼音,莫怪莫怪...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: