C#選擇排序詳解


 選擇排序圖解

                       

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優點與數據移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

C#代碼實現

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

namespace 選擇排序
{
    //選擇排序與冒泡排序比較的次數是一樣的
    //選擇排序的交換次數要比冒泡排序的交換次數少

    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = { 15, 0, 10, 50, 55, 35, 15, 20 }; //待排序數組
            SelectSort(arr);   //調用選擇排序函數      
        }

        private static void SelectSort(int[] arr)
        { 
            int temp = 0;
            for (int i = 0; i < arr.Length - 1; i++)
            {
                int minVal = arr[i]; //假設 i 下標就是最小的數
                int minIndex = i;  //記錄我認為最小的數的下標

                for (int j = i + 1; j < arr.Length; j++)   //這里只是找出這一趟最小的數值並記錄下它的下標
                {
                    //說明我們認為的最小值,不是最小
                    if (minVal > arr[j])    //這里大於號是升序(大於是找出最小值) 小於是降序(小於是找出最大值)
                    {
                        minVal = arr[j];  //更新這趟最小(或最大)的值 (上面要拿這個數來跟后面的數繼續做比較)
                        minIndex = j;    //記下它的下標
                    }
                }
                //最后把最小的數與第一的位置交換
                temp = arr[i];    //把第一個原先認為是最小值的數,臨時保存起來
                arr[i] = arr[minIndex];   //把最終我們找到的最小值賦給這一趟的比較的第一個位置
                arr[minIndex] = temp;  //把原先保存好臨時數值放回這個數組的空地方,  保證數組的完整性
            }
            //控制台輸出
            foreach (int item in arr)
            {
                Console.WriteLine("C#遍歷:{0}", item);
            }
        }
    }
}

 


免責聲明!

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



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