首页 > 学院 > 开发设计 > 正文

排序算法小结

2019-11-17 03:21:20
字体:
来源:转载
供稿:网友

排序算法小结

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

        /// <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;      }

代码下载


上一篇:c# ref与out的区别

下一篇:C# 变量交换

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表