【十八】常见排序算法

以下都是内部排序:

【十八】常见排序算法_第1张图片

public class Sort {

    public static void main(String[] args) {

        int []a = {2,3,1,4,7,8,6,5,0};

        int []b = {1,2,3,4};

        //directChooseSort(a);

        //bubbleSort(a);

        //insertSort(a);

        quickSort(a, 0, a.length-1);

        for(int i=0;i=0&&tempa[j+1]){

                    flag=true;

                    int temp = a[j];

                    a[j] = a[j+1];

                    a[j+1] = temp;

                }

            }

            if(!flag){

                System.out.println("排序提前结束");

                break;

            }

        }

    }

    //直接插入排序和冒泡排序比直接选择排序要快,因为直接选择排序无论如何每一个元素都需要进行过比较

    

    /**

     * 快速排序(属于交换排序)

     */

    public static void quickSort(int a[],int  start,int end){    //O(nlog2(n))    O(log2(n))  不稳定

        if(start>=end){

            return;

        }

        int i=start;

        int j=end;

        int temp=a[i];

        while(i=temp&&j>i) j--;

            a[i]=a[j];

            while(a[i]<=temp&&i

堆排序:堆排序的要点就是调整堆和构造堆,其实构造堆也就是调整堆的过程

构造堆:将堆构造为一个大顶堆或者小顶堆,从最后一个非叶子节点(n/2,(n-1)/2)开始调整,比较该节点和该节点的左孩子与右孩子,选择出一个最大的,然后将该节点与其交换,交换之后如果被交换的孩子节点不满足大顶堆,那么对其进行调整

 

希尔排序:将整个待排元素分割成若干个子序列(相隔某个增量的元素组成)分别进行直接插入排序,待整个序列基本有序后,再对全体元素进行一次直接插入排序。

你可能感兴趣的:(面试)