排序(1)-冒泡排序

来源:互联网 发布:个人官网源码 编辑:程序博客网 时间:2024/05/18 00:05

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 stubint [] 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
原创粉丝点击