C# 四种基本排序算法(冒泡排序,插入排序,选择排序,快速排序)外加折半排序
View
class Program
    {
        static void Main(string[] args)
        {
            //BubbleSort();
            //SelectSort();
            //int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27 };
            int[] arr = GetNumber();
            QuickSort(arr, 0, arr.Length - 1);
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.Read();
        }
        #region Random a new number
        public static int[] GetNumber()
        {
            int[] arr = new int[10];
            Random random = new Random();
            for (int i = 0; i < 10; i++)
            {
                arr[i] = random.Next(DateTime.Now.Millisecond);
            }
            return arr;
        }
        #endregion Random a new number
        #region 冒泡排序
        public static void BubbleSort(int[] arr)
        {
            //int[] arr = new int[] { 13, 4, 6, 3, 8 };
            int temp;
            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])
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }         
        }
        #endregion 冒泡排序
        #region 插入排序
        public static void InsertSort(int[] arr)
        {
            //int[] arr = new int[] { 13, 4, 6, 3, 8 };
            int i, j, temp;
            for (i = 1; i < arr.Length; i++)
            {
                temp = arr[i];
                for (j = i; j > 0; j--)
                {
                    if (temp < arr[j - 1] && j > 0)
                    {
                        arr[j] = arr[j - 1];
                    }
                    else
                        break;
                }
                arr[j] = temp;
            }
        }
        #endregion 插入排序
        #region 选择排序
        public static void SelectSort(int[] arr)
        {
            //int[] arr = new int[] { 13, 4, 6, 3, 8 };
            int min, temp;
            for (int i = 0; i < arr.Length - 1; i++)
            {
                min = i;
                arr[min] = arr[i];
                for (int j = i + 1; j < arr.Length; j++)
                {
                    if (arr[min] > arr[j])
                    {
                        min = j;
                    }
                }
                temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        #endregion 选择排序
        #region 快速排序
        public static void QuickSort(int[] arr, int left, int right)
        {
            int position;
            if (left < right)
            {
                position = KeyValuePosition(arr, left, right);
                QuickSort(arr, left, position - 1);
                QuickSort(arr, position + 1, right);
            }
        }
        //Get keyValuePosition
        public static int KeyValuePosition(int[] arr, int left, int right)
        {
            //int[] arr = new int[] {  49, 38, 65, 97, 76, 13,27 };
            int low = left, high = right, key = arr[left];
            while (low < high)
            {
                while (arr[high] > key)
                {
                    high--;
                }
                if (low < high)
                {
                    arr[low++] = arr[high];
                }
                while (arr[low] < key && low < high)
                {
                    low++;
                }
                if (low < high)
                {
                    arr[high--] = arr[low];
                }
            }
            arr[low] = key;
            return low;
        }
        #endregion 快速排序
    }
        #region 折半插入排序
        
        private static void binaryInsertSort(int[] arr)
        {
             
            for (int i = 1; i < arr.Length; i++)
            {
                if (arr[i] >= arr[i - 1])
                    continue;//为什么吾加就有错呢 
                int temp = arr[i], j;
                int low = 0, high = i - 1, tem;
                while (low <= high)
                {
                    tem = (low + high) / 2;
                    if (temp > arr[tem])
                    {
                        low = tem + 1;
                    }
                    else if (temp < arr[tem])
                    {
                        high = tem - 1;
                    }
                    else
                        break;
                }
                j = i;
                while (low < j)
                {
                    arr[j] = arr[j - 1];
                    j--;
                }
                arr[j] = temp;
            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.Read();
        }
        #endregion 折半插入排序
Code
class Program { static void Main(string[] args) { //BubbleSort(); //SelectSort(); //int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27 }; int[] arr = GetNumber(); QuickSort(arr, 0, arr.Length - 1); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } Console.Read(); } #region Random a new number public static int[] GetNumber() { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < 10; i++) { arr[i] = random.Next(DateTime.Now.Millisecond); } return arr; } #endregion Random a new number #region 冒泡排序 public static void BubbleSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int temp; 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]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } } #endregion 冒泡排序 #region 插入排序 public static void InsertSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int i, j, temp; for (i = 1; i < arr.Length; i++) { temp = arr[i]; for (j = i; j > 0; j--) { if (temp < arr[j - 1] && j > 0) { arr[j] = arr[j - 1]; } else break; } arr[j] = temp; } } #endregion 插入排序 #region 选择排序 public static void SelectSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int min, temp; for (int i = 0; i < arr.Length - 1; i++) { min = i; arr[min] = arr[i]; for (int j = i + 1; j < arr.Length; j++) { if (arr[min] > arr[j]) { min = j; } } temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } #endregion 选择排序 #region 快速排序 public static void QuickSort(int[] arr, int left, int right) { int position; if (left < right) { position = KeyValuePosition(arr, left, right); QuickSort(arr, left, position - 1); QuickSort(arr, position + 1, right); } } //Get keyValuePosition public static int KeyValuePosition(int[] arr, int left, int right) { //int[] arr = new int[] { 49, 38, 65, 97, 76, 13,27 }; int low = left, high = right, key = arr[left]; while (low < high) { while (arr[high] > key) { high--; } if (low < high) { arr[low++] = arr[high]; } while (arr[low] < key && low < high) { low++; } if (low < high) { arr[high--] = arr[low]; } } arr[low] = key; return low; } #endregion 快速排序 }
    生命不息,奋斗不止
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号