排序之快速排序

排序思想:
设置两个搜索指针low和high,它们分别指向首尾,
从high位置开始搜索比支点小的记录,并将其交换到low位置处,low向后移动一个位置,
然后从low位置开始搜索比支点大的位置,并将其交换到high位置处,high向前移动一个位置
如此继续,直到low和high相等结束,这时支点前面的数全小于它,后面全比它大,
然后将支点前面和后面的序列继续进行排序,直到完成排序

public class quickSort {
    
    
    public static void Partition(int arr[], int head, int tail)
    {
        int low = head;
        int high = tail;
        int t = 0;    //记录支点数值
        if (low<high) {
            t = arr[low];   //通常我们记录第一个元素为支点
            while (low<high) {
                while (low < high && t <= arr[high]) {
                    high--;
                }
                if (low < high) {
                    arr[low] = arr[high];
                    low++;
                }
                while (low < high && arr[low] <= t) {
                    low++;
                }
                if (low < high) {
                    arr[high] = arr[low];
                    high--;
                } 
            }
            //将支点元素赋给第一次排序后的high或者low位置
            arr[high] = t;
            Partition(arr,head,low-1);
            Partition(arr,high+1,tail);
        }
        
    }
}
原文地址:https://www.cnblogs.com/du001011/p/10286981.html