选择排序

C#实现选择排序代码如下

        #region 选择排序
        /// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="arr">待排序的数组</param>
        /// <param name="isAsc">是否升序排序,默认为升序排序</param>
        public static void SelectSort(int [] arr,bool isAsc=true)
        {
            if (arr == null) return;

            for(int i = 0; i < arr.Length - 1; i++)
            {
                int idx = i; // 最小(大)元素下标

                /*
                 *  获取 arr[i+1]到arr[arr.Length-1]的最小(大)下标
                 */
                for (int j = i + 1; j < arr.Length; j++)
                {
                    // 升序排序
                    if (isAsc)
                    {
                        if (arr[j] < arr[idx])
                        {
                            idx = j; // 最小值小标,用于与arr[i]交换
                        }
                    }
                    // 降序排序
                    else
                    {
                        if (arr[j] > arr[idx])
                        {
                            idx = j; // 最大值小标,用于与arr[i]交换
                        }
                    }
                }

                // arr[idx]与arr[i]交换
                if(arr[i] != arr[idx])
                {
                    int temp = arr[i];
                    arr[i] = arr[idx];
                    arr[idx] = temp;
                }
            }
        }
        #endregion

 

posted @ 2020-12-04 21:31  温故纳新  阅读(65)  评论(0编辑  收藏  举报