快速排序算法及JAVA实现

起泡排序

起泡排序(Bubble Sort)的过程很简单。首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止,这是第一趟起泡排序,结果使得最大的关键字被安置到最后一个位置上;然后进行第二趟起泡排序,进行n-2次比较。判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。
说明:若初始序列为正序,只需进行一趟排序;若初始序列为倒序,则需进行n-1趟排序。因此,总的时间复杂度为O(n²)。


快速排序

快速排序(Quick Sort)是对起泡排序的一种改进。它的思想是,通过一趟排序将待排记录分割成独立的两部分,一种一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
过程图解:
这里写图片描述

实现思路:
①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
③重复第①、②步,直到左区处理完毕。

JAVA实现:

public class Test {
    public void quicksort(int n[], int left, int right) {
        int dp;
        if (left < right) {
            dp = partition(n, left, right);
            quicksort(n, left, dp - 1);
            quicksort(n, dp + 1, right);
        }
    }
    public int partition(int n[], int left, int right) {
        int pivot = n[left];
        while (left < right) {
            while (left < right && n[right] >= pivot)
                right--;
            if (left < right)
                n[left++] = n[right];
            while (left < right && n[left] <= pivot)
                left++;
            if (left < right)
                n[right--] = n[left];
        }
        n[left] = pivot;
        return left;
    }
    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49};
        QuickSort sort=new QuickSort();
        sort.quickSort(a, 0, a.length-1);
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }

}
原文地址:https://www.cnblogs.com/mazhitao/p/7491259.html