选择排序-二元选择排序

来源:互联网 发布:vnc mac版远程控制软件 编辑:程序博客网 时间:2024/05/17 01:16

 ***************主方法 

       /// <summary>
        /// 二元选择排序-选择排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="array"></param>
        /// <param name="n"></param>
        public void BinarySelectionSorting(T[] array, int n) 
        {
            int max, min;
            T temp;///临时变量        
            for (int i = 0; i <= n /2; i++)
            {
                max = n - i-1;
                min = i;
                for (int j = i+1; j <= n-i-1; j++)
                {///在未排序的区域进行最大值最小值判断
                    if (CompareTo(array[max],array[min])==-1) 
                    {///判断最大值若小于最小值,则互换
                        temp=array[max];
                        array[max] = array[min];
                        array[min] = temp;
                    }
                    if (CompareTo(array[j], array[min]) == -1)
                    {///获取最小值下标
                        min = j;        
                    }
                    if (CompareTo(array[j], array[max]) == 1)
                    {///获取最大值下标
                        max = j;
                    }
                }


                ///将最小最大值换到对应位置上
                temp = array[i];
                array[i] = array[min];
                array[min] = temp;
                temp = array[n - i - 1];
                array[n - i - 1] = array[max];
                array[max] = temp;
                ///打印
                PrintArray(array, n, i);
            }
        }


************************************************

/// <summary>
        /// 打印数组元素
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="array"></param>
        /// <param name="n"></param>
        /// <param name="i"></param>
        public void PrintArray(T[] array, int n, int i) 
        {
            Console.WriteLine("当前i:" + i);
            for (int j = 0; j <n; j++) 
            {
                Console.Write(array[j].ToString()+",");
            }
            Console.WriteLine("");
        }


**************************************************

       /// <summary>
        /// 比较泛型值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t1"></param>
        /// <param name="t2"></param>
        /// <returns></returns>
        public int CompareTo(T t1,T t2) 
        {
            if (Convert.ToDouble(t1) > Convert.ToDouble(t2)) 
            {
                return 1;
            }
            else if(Convert.ToDouble(t1) < Convert.ToDouble(t2))
            {
                return -1;
            }
            else
            {
                return 0;
            }


        }





参考自:http://blog.csdn.net/hguisu/article/details/7776068

感觉他的二元选择排序有问题,优化了下,亲自测试,可以用

0 0