排序算法

转载 2007年09月12日 14:16:00
1、冒泡排序 Bubble Sort
最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的气泡,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个气泡序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即的元素在下面,就交换它们的位置。显然,处理一遍之后,最轻的元素就浮到了最高位置;处理二遍之后,次轻的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是最轻元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。
算法如下:
/**
     *冒泡排序
     *@paramsrc待排序数组
     */
    void doBubbleSort(int[] src)
    {
       int len=src.length;
       for(int i=0;i<len;i++)
       {
           for(int j=i+1;j<len;j++)
           {
              int temp;
              if(src[i]>src[j])
              {
                  temp=src[j];
                  src[j]=src[i];
                  src[i]=temp;
              }            
           }
           printResult(i,src);
       }     
    }
2、选择排序 Selection Sort
选择排序的基本思想是:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。
  当然,实际操作时,也可以根据需要,通过从待排序的记录中选择最大者与其首记录交换位置,按从大到小的顺序进行排序处理。
算法如下:
       /**
     *选择排序
     *@paramsrc待排序的数组
     */
    void doChooseSort(int[] src)
    {
       int len=src.length;
       int temp;
       for(int i=0;i<len;i++)
       {
           temp=src[i];
           int j;
           int samllestLocation=i;//最小数的下标
           for(j=i+1;j<len;j++)
           {
              if(src[j]<temp)
              {
                  temp=src[j];//取出最小值
                  samllestLocation=j;//取出最小值所在下标
              }
           }
           src[samllestLocation]=src[i];
           src[i]=temp;
           printResult(i,src);
       }
    }
3、插入排序 Insertion Sort
插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]L[i-1],如果L[i-1]≤ L[i][1..i]已排好序,第i遍处理就结束了;否则交换L[i]L[i-1]的位置,继续比较L[i-1]L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。
  简言之,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到查找内容中进行。
  图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。
1 4个元素进行插入排序
在下面的插入排序算法中,为了写程序方便我们可以引入一个哨兵元素L[0],它小于L[1..n]中任一记录。所以,我们设元素的类型ElementType中有一个常量-∞,它比可能出现的任何记录都小。如果常量-∞不好事先确定,就必须在决定L[i]是否向前移动之前检查当前位置是否为1,若当前位置已经为1时就应结束第i遍的处理。另一个办法是在第i遍处理开始时,就将L[i]放入L[0]中,这样也可以保证在适当的时候结束第i遍处理。下面的算法中将对当前位置进行判断。
算法如下:
    /**
     *插入排序(WHILE循环实现)
     *@paramsrc待排序数组
     */
    void doInsertSort1(int[] src)
    {
       int len=src.length;
       for(int i=1;i<len;i++)
       {  
           int temp=src[i];
           int j=i;
          
           while(src[j-1]>temp)
           {
              src[j]=src[j-1];
              j--;
              if(j<=0)
                  break;
           }
           src[j]=temp;
           printResult(i+1,src);
       }
    }
    /**
     *插入排序(FOR循环实现)
     *@paramsrc待排序数组
     */
    void doInsertSort2(int[] src)
    {
       int len=src.length;
       for(int i=1;i<len;i++)
       {
           int j;
           int temp=src[i];
           for(j=i;j>0;j--)
           {
              if(src[j-1]>temp)
              {
                  src[j]=src[j-1];
                 
              }else//如果当前的数,不小前面的数,那就说明不小于前面所有的数,
                   //因为前面已经是排好了序的,所以直接通出当前一轮的比较
                  break;
           }
           src[j]=temp;
           printResult(i,src);
       }
    }
 
 

三大简单排序算法(java)

排序是日常生活中最常见的数据处理应用之一,排序算法也是算法学习中的基础课程之一,从最基础的三大排序算法开始,开始算法学习之路吧。 准备工作:为了便于进行算法验证,先将在类ArraySort中封装一...

排序算法ppt

  • 2017年11月03日 20:37
  • 1.37MB
  • 下载

排序算法比较 C实现

  • 2017年06月16日 12:34
  • 413KB
  • 下载

java实现冒泡、选择、快速排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列...

java各自排序算法的实现

  • 2015年06月16日 16:27
  • 3KB
  • 下载

各种排序算法

  • 2015年04月27日 10:09
  • 197KB
  • 下载

数据结构-八大排序算法总结

一.插入排序  1.直接插入算法    时间复杂度o(n^2)  空间复杂度o(1) #include #include #include #include /***************...

常用排序算法复杂度

  • 2017年09月22日 16:11
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法
举报原因:
原因补充:

(最多只允许输入30个字)