.NET面試題系列(三)排序算法


冒泡排序

           int[] arr = { 6, 5, 3, 1, 8, 7, 2, 4 };
            //外層循環控制排序趟數
            for (int i = 0; i < arr.Length - 1; i++)
            { 
                //內層循環控制每一趟排序多少次
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }

 快速排序

選擇排序也是一種簡單直觀的排序算法。

它的工作原理很容易理解:初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列;然后,再從剩余未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。

以此類推,直到所有元素均排序完畢。

注意選擇排序與冒泡排序的區別:冒泡排序通過依次交換相鄰兩個順序不合法的元素位置,從而將當前最小(大)元素放到合適的位置;

而選擇排序每遍歷一次都記住了當前最小(大)元素的位置,最后僅需一次交換操作即可將其放到合適的位置。

 int[] arr = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 從小到大選擇排序

 

void SelectionSort(int[] A)
        {
            for (int i = 0; i < A.Length - 1; i++)         // i為已排序序列的末尾
            {
                int min = i;
                for (int j = i + 1; j < A.Length; j++)     // 未排序序列
                {
                    if (A[j] < A[min])              // 找出未排序序列中的最小值
                    {
                        min = j;
                    }
                }
                if (min != i)
                {
                    Swap(A, min, i);    // 放到已排序序列的末尾,該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序算法
                }
            }
        }

希爾排序

http://www.cnblogs.com/cnki/

堆排序

https://www.cnblogs.com/learn-program/p/9613042.html

https://www.cnblogs.com/kubidemanong/p/9722646.html

http://www.cnblogs.com/eniac12/p/5329396.html

https://www.cnblogs.com/cuiyuanzhang/p/10452516.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM