排序(1)-冒泡排序

1.基本概念

       根据在排序过程中待排序的记录是否全部被放置在内存中,将排序分为内部排序和外部排序。内部排序是在排序整个过程中,待排序的所有记录全部 放置在内存中;外排序是由于排序的记录个数太多,不能同时放置在内存中,整个排序过程需要 在内外存之间多次交换数据才能进行。


2.八大排序

        下面讲述的八大排序,都是属于内部排序。具体如下图



3.冒泡排序

           首先来讲讲冒泡排序(Bubble Sort),这是思路最简单的排序方式。他的基本思想是:重复地走访要排序的数列,一次比较2相邻的元素,如果它们的顺序错误就把它们交换过来,直到没有再需要交换的,这样越大的元素经由交换会慢慢“浮出”。(这里的排序一般都是从小到大的进行排序)

初:   49    38    65    97   76   13    27    49

1st:    38    49    65    76    13   27    49   97

2nd:   38    49    65    13    27   49   76    97

3rd:    38    49    13    27    49    65   76    97

4th:    38    13     27   49     49   65   76    97

5th:    13     27    38   49     49   65   76    97

每走访一次数列,都会有一个相对最大的元素浮出。


4.时间复杂度

(1)最好的情况,即待排序的数列初状态为正序,则一起泡就可以完成排序,则进行了n-1次比较,没有数据交换,时间复杂度为O(n)

(2)最坏的情况,即待排序的数列初状态为逆序,此时需要比较n(n-1)/2次,并做等数量的数据交换,因此总的之间复杂度为O(n^2)。

冒泡排序是一种稳定的排序方法。


5.java代码的实现

public class bubble {
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] a = {57,68,59,52,72,28,96,33,24,19};
		//int []a = {57,68,59,52};
		System.out.println("冒泡排序的结果是:  ");
		bubbleSort(a);
		printscreen(a);
		
		
	}
	 private static void printscreen(int[] number) {
	        // TODO Auto-generated method stub
	              int size = number.length;
	               for (int  i = 0 ; i < size;i++)
	                   System.out.print(number[i]+ " ");
	               System.out.println();
		
	}
	//冒泡排序
	/**
	 * 
	 * @author Administrator
	 *冒泡排序
     *比较相邻的元素,如果第一个比第二个大,就交换他们两个
     *对每一对相邻的元素做相同的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的
     *针对素有的元素重复以上步骤,除了最后一个
     *持续每次对越来越少的元素重复上面的操作,直到没有一个数字需要比较
	 */
	public static void bubbleSort(int [] number)
	{   //nuberm.lengthnuberm.length放在外面,较少调用函数的次数,提高效率?
		int size = number.length;
		for(int i = 0;i < size -1;i++ )//每次比较最大的到了最后,下一次不用再参与比较
		{
			for(int j = 0;j < size - 1 - i;j++)//下面有j+1,所以上限要-1
			{
				if (number[j] > number[j+1])
				{
					int n = number[j];
					number[j] = number[j+1];
					number[j+1] = n;
				}
				
			}
		}
	}
	
	
	
	
	
}






      


     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值