婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 算法系列15天速成 第二天 七大經(jīng)典排序【中】

算法系列15天速成 第二天 七大經(jīng)典排序【中】

熱門標(biāo)簽:洛陽(yáng)便宜外呼系統(tǒng)廠家 電銷機(jī)器人怎么收費(fèi) 滄州智能外呼系統(tǒng)收費(fèi) 嘟聲的電銷機(jī)器人 湖北穩(wěn)定外呼系統(tǒng) 醫(yī)院地圖標(biāo)注 忻州外呼系統(tǒng)接口對(duì)接 地圖標(biāo)注和圖片標(biāo)注 語(yǔ)音平臺(tái)系統(tǒng)

首先感謝朋友們對(duì)第一篇文章的鼎力支持,感動(dòng)中....... 

 

今天說(shuō)的是選擇排序,包括“直接選擇排序”和“堆排序”。

話說(shuō)上次“冒泡排序”被快排虐了,而且“快排”贏得了內(nèi)庫(kù)的重用,眾兄弟自然眼紅,非要找快排一比高下。

這不今天就來(lái)了兩兄弟找快排算賬。

1.直接選擇排序: 

先上圖:

說(shuō)實(shí)話,直接選擇排序最類似于人的本能思想,比如把大小不一的玩具讓三歲小毛孩對(duì)大小排個(gè)序,

那小孩首先會(huì)在這么多玩具中找到最小的放在第一位,然后找到次小的放在第二位,以此類推。。。。。。

,小孩子多聰明啊,這么小就知道了直接選擇排序。羨慕中........

對(duì)的,小孩子給我們上了一課,

第一步: 我們拿80作為參照物(base),在80后面找到一個(gè)最小數(shù)20,然后將80跟20交換。

第二步:  第一位數(shù)已經(jīng)是最小數(shù)字了,然后我們推進(jìn)一步在30后面找一位最小數(shù),發(fā)現(xiàn)自己最小,不用交換。

第三步:........

最后我們排序完畢。大功告成。

既然是來(lái)挑戰(zhàn)的,那就5局3勝制。

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace SelectionSort
{
    public class Program
    {
        static void Main(string[] args)
        {
            //5次比較
            for (int i = 1; i = 5; i++)
            {
                Listint> list = new Listint>();

                //插入2w個(gè)隨機(jī)數(shù)到數(shù)組中
                for (int j = 0; j 20000; j++)
                {
                    Thread.Sleep(1);
                    list.Add(new Random((int)DateTime.Now.Ticks).Next(1000, 1000000));
                }

                Console.WriteLine("\n第" + i + "次比較:");

                Stopwatch watch = new Stopwatch();

                watch.Start();
                var result = list.OrderBy(single => single).ToList();
                watch.Stop();

                Console.WriteLine("\n快速排序耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù):" + string.Join(",", result.Take(10).ToList()));

                watch.Start();
                result = SelectionSort(list);
                watch.Stop();

                Console.WriteLine("\n直接選擇排序耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù):" + string.Join(",", list.Take(10).ToList()));

            }
        }

        //選擇排序
        static Listint> SelectionSort(Listint> list)
        {
            //要遍歷的次數(shù)
            for (int i = 0; i list.Count - 1; i++)
            {
                //假設(shè)tempIndex的下標(biāo)的值最小
                int tempIndex = i;

                for (int j = i + 1; j list.Count; j++)
                {
                    //如果tempIndex下標(biāo)的值大于j下標(biāo)的值,則記錄較小值下標(biāo)j
                    if (list[tempIndex] > list[j])
                        tempIndex = j;
                }

                //最后將假想最小值跟真的最小值進(jìn)行交換
                var tempData = list[tempIndex];
                list[tempIndex] = list[i];
                list[i] = tempData;
            }
            return list;
        }
    }
}

比賽結(jié)果公布:

堆排序:

要知道堆排序,首先要了解一下二叉樹(shù)的模型。

下圖就是一顆二叉樹(shù),具體的情況我后續(xù)會(huì)分享的。

那么堆排序中有兩種情況(看上圖理解):

    大根堆:  就是說(shuō)父節(jié)點(diǎn)要比左右孩子都要大。

    小根堆:  就是說(shuō)父節(jié)點(diǎn)要比左右孩子都要小。

 

那么要實(shí)現(xiàn)堆排序,必須要做兩件事情:

   第一:構(gòu)建大根堆。

           首先上圖:

           

首先這是一個(gè)無(wú)序的堆,那么我們?cè)鯓硬拍軜?gòu)建大根堆呢?

     第一步: 首先我們發(fā)現(xiàn),這個(gè)堆中有2個(gè)父節(jié)點(diǎn)(2,,3);

     第二步: 比較2這個(gè)父節(jié)點(diǎn)的兩個(gè)孩子(4,5),發(fā)現(xiàn)5大。

     第三步: 然后將較大的右孩子(5)跟父節(jié)點(diǎn)(2)進(jìn)行交換,至此3的左孩子堆構(gòu)建完畢,

                 如圖:

                         

     第四步: 比較第二個(gè)父節(jié)點(diǎn)(3)下面的左右孩子(5,1),發(fā)現(xiàn)左孩子5大。

     第五步: 然后父節(jié)點(diǎn)(3)與左孩子(5)進(jìn)行交換,注意,交換后,堆可能會(huì)遭到破壞,

                 必須按照以上的步驟一,步驟二,步驟三進(jìn)行重新構(gòu)造堆。

           

最后構(gòu)造的堆如下:

                 

 

   第二:輸出大根堆。

             至此,我們把大根堆構(gòu)造出來(lái)了,那怎么輸出呢?我們做大根堆的目的就是要找出最大值,

         那么我們將堆頂(5)與堆尾(2)進(jìn)行交換,然后將(5)剔除根堆,由于堆頂現(xiàn)在是(2),

         所以破壞了根堆,必須重新構(gòu)造,構(gòu)造完之后又會(huì)出現(xiàn)最大值,再次交換和剔除,最后也就是俺們

         要的效果了,

 

 

發(fā)現(xiàn)自己兄弟被別人狂毆,,堆排序再也坐不住了,決定要和快排干一場(chǎng)。

同樣,快排也不甘示弱,誰(shuí)怕誰(shuí)?

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace HeapSort
{
    public class Program
    {
        static void Main(string[] args)
        {
            //5次比較
            for (int j = 1; j = 5; j++)
            {
                Listint> list = new Listint>();

                //插入2w個(gè)數(shù)字
                for (int i = 0; i 20000; i++)
                {
                    Thread.Sleep(1);
                    list.Add(new Random((int)DateTime.Now.Ticks).Next(1000, 100000));
                }

                Console.WriteLine("\n第" + j + "次比較:");

                Stopwatch watch = new Stopwatch();
                watch.Start();
                var result = list.OrderBy(single => single).ToList();
                watch.Stop();
                Console.WriteLine("\n快速排序耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù)" + string.Join(",", result.Take(10).ToList()));

                watch = new Stopwatch();
                watch.Start();
                HeapSort(list);
                watch.Stop();
                Console.WriteLine("\n堆排序耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù)" + string.Join(",", list.Take(10).ToList()));
            }

        }

        ///summary>
/// 構(gòu)建堆
////summary>
///param name="list">待排序的集合/param>
///param name="parent">父節(jié)點(diǎn)/param>
///param name="length">輸出根堆時(shí)剔除最大值使用/param>
        static void HeapAdjust(Listint> list, int parent, int length)
        {
            //temp保存當(dāng)前父節(jié)點(diǎn)
            int temp = list[parent];

            //得到左孩子(這可是二叉樹(shù)的定義,大家看圖也可知道)
            int child = 2 * parent + 1;

            while (child length)
            {
                //如果parent有右孩子,則要判斷左孩子是否小于右孩子
                if (child + 1 length list[child] list[child + 1])
                    child++;

                //父親節(jié)點(diǎn)大于子節(jié)點(diǎn),就不用做交換
                if (temp >= list[child])
                    break;

                //將較大子節(jié)點(diǎn)的值賦給父親節(jié)點(diǎn)
                list[parent] = list[child];

                //然后將子節(jié)點(diǎn)做為父親節(jié)點(diǎn),已防止是否破壞根堆時(shí)重新構(gòu)造
                parent = child;

                //找到該父親節(jié)點(diǎn)較小的左孩子節(jié)點(diǎn)
                child = 2 * parent + 1;
            }
            //最后將temp值賦給較大的子節(jié)點(diǎn),以形成兩值交換
            list[parent] = temp;
        }

        ///summary>
/// 堆排序
////summary>
///param name="list">/param>
        public static void HeapSort(Listint> list)
        {
            //list.Count/2-1:就是堆中父節(jié)點(diǎn)的個(gè)數(shù)
            for (int i = list.Count / 2 - 1; i >= 0; i--)
            {
                HeapAdjust(list, i, list.Count);
            }

            //最后輸出堆元素
            for (int i = list.Count - 1; i > 0; i--)
            {
                //堆頂與當(dāng)前堆的第i個(gè)元素進(jìn)行值對(duì)調(diào)
                int temp = list[0];
                list[0] = list[i];
                list[i] = temp;

                //因?yàn)閮芍到粨Q,可能破壞根堆,所以必須重新構(gòu)造
                HeapAdjust(list, 0, i);
            }
        }
    }
}

結(jié)果公布:

堆排序此時(shí)心里很尷尬,雙雙被KO,心里想,一定要撈回面子,一定要贏,

于是堆排序提出了求“前K大問(wèn)題”。(就是在海量數(shù)據(jù)中找出前幾大的數(shù)據(jù)),

快排一口答應(yīng),小意思,沒(méi)問(wèn)題。

雙方商定,在2w隨機(jī)數(shù)中找出前10大的數(shù):

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace QuickSort
{
    public class Program
    {
        static void Main(string[] args)
        {
            //5此比較
            for (int j = 1; j = 5; j++)
            {
                Listint> list = new Listint>();

                for (int i = 0; i 20000; i++)
                {
                    Thread.Sleep(1);
                    list.Add(new Random((int)DateTime.Now.Ticks).Next(1000, 100000));
                }

                Console.WriteLine("\n第" + j + "次比較:");

                Stopwatch watch = new Stopwatch();
                watch.Start();
                var result = list.OrderByDescending(single => single).Take(10).ToList();
                watch.Stop();
                Console.WriteLine("\n快速排序求前K大耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù):" + string.Join(",", result.Take(10).ToList()));

                watch = new Stopwatch();
                watch.Start();
                result = HeapSort(list, 10);
                watch.Stop();
                Console.WriteLine("\n堆排序求前K大耗費(fèi)時(shí)間:" + watch.ElapsedMilliseconds);
                Console.WriteLine("輸出前十個(gè)數(shù):" + string.Join(",", list.Take(10).ToList()));
            }

        }

        ///summary>
/// 構(gòu)建堆
////summary>
///param name="list">待排序的集合/param>
///param name="parent">父節(jié)點(diǎn)/param>
///param name="length">輸出根堆時(shí)剔除最大值使用/param>
        static void HeapAdjust(Listint> list, int parent, int length)
        {
            //temp保存當(dāng)前父節(jié)點(diǎn)
            int temp = list[parent];

            //得到左孩子(這可是二叉樹(shù)的定義哇)
            int child = 2 * parent + 1;

            while (child length)
            {
                //如果parent有右孩子,則要判斷左孩子是否小于右孩子
                if (child + 1 length list[child] list[child + 1])
                    child++;

                //父節(jié)點(diǎn)大于子節(jié)點(diǎn),不用做交換
                if (temp >= list[child])
                    break;

                //將較大子節(jié)點(diǎn)的值賦給父親節(jié)點(diǎn)
                list[parent] = list[child];

                //然后將子節(jié)點(diǎn)做為父親節(jié)點(diǎn),已防止是否破壞根堆時(shí)重新構(gòu)造
                parent = child;

                //找到該父節(jié)點(diǎn)左孩子節(jié)點(diǎn)
                child = 2 * parent + 1;
            }
            //最后將temp值賦給較大的子節(jié)點(diǎn),以形成兩值交換
            list[parent] = temp;
        }

        ///summary>
/// 堆排序
////summary>
///param name="list">待排序的集合/param>
///param name="top">前K大/param>
///returns>/returns>
        public static Listint> HeapSort(Listint> list, int top)
        {
            Listint> topNode = new Listint>();

            //list.Count/2-1:就是堆中非葉子節(jié)點(diǎn)的個(gè)數(shù)
            for (int i = list.Count / 2 - 1; i >= 0; i--)
            {
                HeapAdjust(list, i, list.Count);
            }

            //最后輸出堆元素(求前K大)
            for (int i = list.Count - 1; i >= list.Count - top; i--)
            {
                //堆頂與當(dāng)前堆的第i個(gè)元素進(jìn)行值對(duì)調(diào)
                int temp = list[0];
                list[0] = list[i];
                list[i] = temp;

                //最大值加入集合
                topNode.Add(temp);

                //因?yàn)轫樞虮淮騺y,必須重新構(gòu)造堆
                HeapAdjust(list, 0, i);
            }
            return topNode;
        }
    }
}

求前K大的輸出結(jié)果:

最后堆排序趕緊拉著直接選擇排序一路小跑了,因?yàn)榍笄癒大問(wèn)題已經(jīng)不是他原本來(lái)的目的。

ps: 直接選擇排序的時(shí)間復(fù)雜度為:O(n^2)

       堆排序的時(shí)間復(fù)雜度:O(NlogN)

您可能感興趣的文章:
  • 算法系列15天速成 第十四天 圖【上】
  • 算法系列15天速成——第十三天 樹(shù)操作【下】
  • 算法系列15天速成 第十二天 樹(shù)操作【中】
  • 算法系列15天速成 第十一天 樹(shù)操作(上)
  • 算法系列15天速成 第十天 棧
  • 算法系列15天速成 第八天 線性表【下】
  • 算法系列15天速成 第九天 隊(duì)列
  • 算法系列15天速成 第七天 線性表【上】
  • 算法系列15天速成 第六天 五大經(jīng)典查找【下】
  • 算法系列15天速成 第五天 五大經(jīng)典查找【中】
  • 算法系列15天速成 第四天 五大經(jīng)典查找【上】
  • 算法系列15天速成 第三天 七大經(jīng)典排序【下】
  • 算法系列15天速成 第一天 七大經(jīng)典排序【上】
  • 算法系列15天速成——第十五天 圖【下】(大結(jié)局)

標(biāo)簽:防城港 日照 巴彥淖爾 宜賓 山南 內(nèi)蒙古 定州 96

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《算法系列15天速成 第二天 七大經(jīng)典排序【中】》,本文關(guān)鍵詞  算法,系列,15天,速成,第二天,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《算法系列15天速成 第二天 七大經(jīng)典排序【中】》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于算法系列15天速成 第二天 七大經(jīng)典排序【中】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产欧美日韩三级| 91精品国产综合久久香蕉的特点| www国产亚洲精品久久麻豆| 91性感美女视频| 国产高清久久久| 久久成人18免费观看| 亚洲柠檬福利资源导航| 国产性色一区二区| 欧美精品一区视频| 日韩免费观看高清完整版| 欧美在线一二三| 欧美吻胸吃奶大尺度电影| 一本一道波多野结衣一区二区| 国产不卡在线视频| 成人性生交大合| 国产成人午夜精品影院观看视频 | 日本电影欧美片| 99麻豆久久久国产精品免费优播| 久久99精品视频| 国产精品影音先锋| 久久国产成人午夜av影院| 丝袜美腿一区二区三区| 亚洲国产另类精品专区| 亚洲图片欧美综合| 亚洲成人自拍网| 日韩激情视频在线观看| 天堂蜜桃91精品| 欧美bbbbb| 国产精品一区二区在线播放 | 国产欧美日韩激情| 国产精品视频一区二区三区不卡| 国产欧美中文在线| 国产精品人妖ts系列视频| 中文字幕在线不卡国产视频| 国产丝袜欧美中文另类| 国产精品免费久久久久| 亚洲免费在线视频| 日韩高清中文字幕一区| 蜜桃视频在线观看一区| 国产美女在线精品| 91在线免费看| 欧美日韩国产综合视频在线观看 | 欧美理论在线播放| 日韩你懂的在线观看| 久久久国产精品麻豆| 一区二区三区四区激情| 免费观看在线色综合| 丰满白嫩尤物一区二区| 欧美午夜精品久久久久久孕妇 | 欧美男男青年gay1069videost| 欧美一区二区三区人| 久久精品一区二区三区四区| 亚洲欧美综合色| 无码av免费一区二区三区试看 | 丰满放荡岳乱妇91ww| 日韩成人av影视| 久久久久久久久久久久电影| 欧美一区二区三区在线视频| 国产精品123| 精品在线观看视频| 972aa.com艺术欧美| 制服丝袜亚洲色图| 日本一区二区三区dvd视频在线| 亚洲日本在线天堂| 蜜臀va亚洲va欧美va天堂 | 欧美精品一区二区久久婷婷| 国产精品久久久久久亚洲毛片| 亚洲精品国产精品乱码不99 | 大胆欧美人体老妇| 欧美日韩国产精品成人| 国产欧美精品一区| 久久国内精品视频| 欧美三级在线播放| 日韩理论电影院| 国产精品资源网| 欧美一级免费观看| 日韩一区中文字幕| 免费高清在线一区| 在线观看国产91| 中文字幕欧美激情| 国产一区二区三区免费播放| 欧美日韩精品电影| 亚洲一区免费观看| 91亚洲国产成人精品一区二区三| 久久久综合激的五月天| 久久不见久久见免费视频1| 色噜噜狠狠成人网p站| 国产精品美女久久久久av爽李琼| 国模无码大尺度一区二区三区| 欧美日韩日日夜夜| 亚洲伦在线观看| 91浏览器打开| 中文字幕一区二区三区精华液 | 国产精品理伦片| 国产成人a级片| 久久久美女毛片| 国产成人精品亚洲777人妖| 精品国产露脸精彩对白| 免费成人在线观看| 欧美电影免费观看高清完整版在线观看| 亚洲精品写真福利| 欧美三级在线视频| 日韩国产欧美在线观看| 日韩一区二区三区电影 | 成人免费精品视频| 国产精品国产三级国产普通话99 | 欧美高清视频不卡网| 青青草国产成人av片免费| 日韩一本二本av| 韩国欧美国产一区| 国产欧美日本一区视频| 99久久婷婷国产| 亚洲观看高清完整版在线观看| 91精品婷婷国产综合久久性色 | 激情欧美日韩一区二区| xf在线a精品一区二区视频网站| 另类小说综合欧美亚洲| 久久影视一区二区| av电影在线观看完整版一区二区| 中文字幕中文字幕一区| 在线亚洲+欧美+日本专区| 偷拍亚洲欧洲综合| 国产香蕉久久精品综合网| 99精品热视频| 天涯成人国产亚洲精品一区av| 久久综合久久99| 99久久99久久免费精品蜜臀| 丝袜亚洲另类欧美| 欧美精品一区二区三区很污很色的| 国产精品69久久久久水密桃| 亚洲视频小说图片| 日韩精品中文字幕在线一区| 成人免费毛片a| 日本 国产 欧美色综合| 国产日产欧美一区二区三区 | 欧美一区二区三区在线看| 国产成人综合网| 五月激情六月综合| 中文字幕不卡在线| 欧美喷潮久久久xxxxx| 成人听书哪个软件好| 欧美aⅴ一区二区三区视频| 国产精品三级久久久久三级| 欧美色中文字幕| www.欧美日韩国产在线| 99久久久久久99| 毛片一区二区三区| 依依成人综合视频| 久久精品欧美一区二区三区不卡| 欧美日韩一区高清| 成人中文字幕合集| 韩国一区二区三区| 日本视频一区二区| 亚洲sss视频在线视频| 亚洲欧美在线观看| 国产女同性恋一区二区| 日韩一区二区三区四区五区六区| 91国在线观看| 福利电影一区二区三区| 蜜臀av在线播放一区二区三区 | 欧美日韩国产一二三| gogogo免费视频观看亚洲一| 国产在线国偷精品产拍免费yy| 日韩中文字幕麻豆| 亚洲第一久久影院| 亚洲亚洲精品在线观看| 亚洲色欲色欲www在线观看| 国产丝袜欧美中文另类| 久久综合色婷婷| 精品久久人人做人人爽| 精品少妇一区二区三区日产乱码 | 日韩国产高清在线| 一二三四区精品视频| 一区二区三区四区在线免费观看| 亚洲日本中文字幕区| 中文字幕一区二区三区不卡在线| 国产欧美一区二区精品忘忧草| 2021中文字幕一区亚洲| 26uuu色噜噜精品一区二区| 精品免费国产二区三区| 精品国精品国产尤物美女| 精品剧情在线观看| 国产色一区二区| 国产欧美1区2区3区| 中文字幕在线观看一区| 综合久久久久综合| 亚洲精品免费在线| 石原莉奈一区二区三区在线观看| 亚洲国产精品自拍| 无码av中文一区二区三区桃花岛| 日本不卡不码高清免费观看| 蜜臀av一区二区在线免费观看 | 日本精品一区二区三区高清 | 欧美三级在线看| 欧美顶级少妇做爰| 日韩一卡二卡三卡四卡| 久久久久成人黄色影片| 国产欧美一区二区精品性色超碰| 国产精品免费久久久久| 亚洲男帅同性gay1069|