排序算法小结


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

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

代码下载

优质内容筛选与推荐>>
1、SQL行转列
2、用PHP读取和编写XML DOM5
3、支付宝APP支付之Java后台生成签名具体步骤
4、svn服务器搭建
5、oracle11g,安装失败,提示找不到文件,win7 64位下报错


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn