數據結構-快速排序(C#實現)

快速排序的主要思路:html

1.在數組首尾處各設一個標記web

2.取出數組第一個值做爲中樞值數組

3.全部數據跟中樞值比較:比中樞值小的放中樞值左邊,首部標記++往右推一位,大的放中樞值右邊,尾部標記--往左推一位(從小到大排序)ui

4.先從尾部開始與中樞值比較,若是尾部標記的值比中樞值大直接把標記往左推一位,若是尾部標記比中樞值小就把尾部標記的值放到首部標記的位置,而後開始從首部開始與中樞值比較,若是首部標記的值比中樞值小直接把標記往右推一位,若是首部標記比中樞值大就把首部標記的值放到尾部標記的位置,一直循環直至首尾標記相遇。spa

5.首尾標記相遇表明找到了中樞值的準確位置,此時將數組從中樞值一分爲二,使用遞歸繼續對中樞值左右兩側的數據使用相同的方法進行排序;視頻

 

C#示例代碼:htm

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QuickSort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 7, 1, 5, 4, 6, 7, 3, 9, 8, 2 };
            QuickSort(0, 9, ref array);
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(array[i]);
            }
            return;
        }

        static void QuickSort(int iMin,int iMax,ref int[] a)
        {
            int i = iMin, j = iMax, iPivot = a[iMin];
            if (iMin >= iMax)
            {
                return;
            }
            while (i < j)
            {
                while (a[j] >= iPivot && i < j)
                {
                    j--;
                }
                if (i < j)
                {
                    a[i] = a[j];
                    i++;
                }
                while (a[i] <= iPivot && i < j)
                {
                    i++;
                }
                if (i < j)
                {
                    a[j] = a[i];
                    j--;
                }
            }
            a[i] = iPivot;
            QuickSort(iMin, i - 1, ref a);
            QuickSort(i + 1, iMax, ref a);
        }
    }
}

 

相關視頻連接:https://ke.qq.com/webcourse/index.html#course_id=150239&term_id=100171220&taid=686915594635999&vid=b1411uydxseblog

相關文章
相關標籤/搜索