排序算法小结

一、选择排序:选择排序是一种最简单直观的排序算法。首先在未排序数列中找到最大(小)的元素,存放到排序数列的起始(结束)位置,再从剩余的排序元素中继续寻找最大(小)的元素,然后放在已排序元素的末尾(前面)。以此类推,直到所有元素排序完成。代码如下:

        /// <summary>
        /// 选择排序(从小到大)
        /// </summary>
        /// <param name="list">待排序数组</param>
        public static int[] SelectionSort(int[] list)
        {
            int min; //存储最小元素
            int minIndex; //存储最小元素的索引
            int temp;
            int i, j;
            int len = list.Length; //数组长度
            for (i = 0; i < len - 1; i++)
            {
                min = list[i];
                minIndex = i;
                for (j = i; j < len; j++)
                {
                    if (list[j] < min)
                    {
                        min = list[j];
                        minIndex = j;
                    }
                }
                if (minIndex > i) //交换元素,把最小的元素放在最前面
                {
                    temp = list[i];
                    list[i] = min;
                    list[minIndex] = temp;
                }
            }
            return list;
      }

二、冒泡排序:冒泡排序是一种交换排序。它重复的走访要排序的数列,一次比较两个元素,如果他们的顺序错误则把它们交换过来。走访数列的工作是重复进行直到没有元素交换,也就说明已完成排序。代码如下:

        /// <summary>
        /// 冒泡排序(从小到大)
        /// </summary>
        /// <param name="list">待排序数组</param>
        /// <returns></returns>
        public static int[] BubbleSort(int[] list)
        {
            int i, j;
            int temp;
            int len = list.Length;
            int exchange = len - 1;  //记录发生交换的位置
            while (true)
            {
                int bound = exchange;
                exchange = 0;  //假定本趟比较没有元素交换
                for (i = 0; i < bound; i++)
                {
                    j = i + 1;
                    if (list[i] > list[j]) //交换元素,值大的元素后移
                    {
                        temp = list[i];
                        list[i] = list[j];
                        list[j] = temp;
                        exchange = i;
                    }
                }
                if (exchange == 0)  //本趟比较没有发生元素交换则说明已经排序好
                {
                    break;
                }
            }
            return list;
       }

三、插入排序:插入算法首先把要排序的数组分成两部分:第一部分为未排序数据包含了这个数组的所有元素,但最后一个元素除外,而第二部分为已排序数据就只包含这一个元素。对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。代码如下:

        /// <summary>
        /// 插入排序(从小到大)
        /// </summary>
        /// <param name="list">待排序数组</param>
        /// <returns></returns>
        public static int[] InsertionSort(int[] list)
        {
            int i, j;
            int temp;
            int len = list.Length;
            for (i = 1; i < len; i++)
            {
                j = i - 1;
                temp = list[i];
                while (j>=0 && list[j]>temp)
                {
                    list[j + 1] = list[j];
                    j--;
                }
                list[j+1] = temp;  //被排序的数放到正确的位置
            }
            return list;
      }

 代码下载

你可能感兴趣的:(排序算法)