常用排序算法(java实现)

  这篇博客主要说一下常见的排序算法,有些算法会给出相应的java代码。

  排序的目的是为了提高查找的效率。

  排序算法主要分为内部排序和外部排序,或者稳定排序或不稳定排序。

  内部排序是指排序序列完全存放在内存中进行的排序过程,这种方法适合数量不太大的数据元素的排序。外部排序是指待排序的数据元素非常多,以至于它们必须存储在外部存储器上,这种排序过程中需要访问外存储器,这样的排序称为外排序。这里主要讨论内排序。

内部排序方法大致可以分为以下几种类型:

一、插入排序

1.直接插入排序
2.希尔排序

二、交换排序

1.冒泡排序

2.快速排序

  快速排序时一种划分交换排序方法,是冒泡排序的一种改进算法,采用了分治策略。

基本思想

通过一趟排序将要排序的记录分割成独立的两个部分,其中一部分的所有记录的关键字值都比另外一部分的所有记录关键字值小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个记录序列变成有序。

    //【】一趟快速排序
    public int Partition(int i,int j){
        RecordNode pivot=r[i];//第一个记录作为支点记录
        System.out.print(i+".."+j+",pivot="+pivot.getKey()+" ");//记录排序过程
        while(i<j){//从表的两端交替地向中间扫描
            while(i<j&&pivot.getKey().compareTo(r[j].getKey())<=0)
                j--;
            if(i<j){
                r[i]=r[j];//将比支点记录关键字小的记录向前移动
                i++;
            }
            while(i<j&&pivot.getKey().compareTo(r[i].getKey())>0)
                i++;
            if(i<j){
                r[j]=r[i];//将比关键字值大的记录向后移动
                j--;
            }
        }
        r[i]=pivot;//支点记录到位
        display();
        return i;//返回支点位置
    }
   //【】递归形式的快速排序算法
    public void qSort(int low,int high){
        if(low<high){
            int pivotloc=Partition(low,high);//一趟排序,将排序表分为两部分
            qSort(low,pivotloc-1);//低子表递归排序
            qSort(pivotloc+1,high);//高子表递归排序
        }

    }

三、选择排序

1.直接选择排序
2.树形选择排序
3.堆排序

四、归并排序

五、其他排序(级数排序)

1.多关键字排序
2.链式基数排序

猜你喜欢

转载自blog.csdn.net/weixin_37610397/article/details/80740730
今日推荐