IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 算法基礎(一)
算法基礎(一)
時間:2016-12-14作者:華清遠見

排序:

我們為何要研究排序?
        1. 有時候應用程序本身需要對信息進行排序。
        2. 許多程序把排序程序作為關鍵子程序。
        3. 排序是我們學習編程的基本的訓練,對于程序的優化有很重要的作用。

我們之前已經學過簡單排序法和冒泡排序法。接下來我們介紹一下插入排序和合并排序。
        1. 插入排序
        輸入:n個數(a 1 ,a 2 ,.....a n)
        輸出:輸入序列的一個排序(b1,b2....bn),使得b1 <= b2 <=....<=bn

插入排序的機制和打牌時整理手中的牌做法差不多。摸牌的時候,需要將摸到的牌插入到手中一把牌中的正確的位置上。為了要找到這張牌的位置,我們需要將它與手中每張牌從右到左進行比較。無論何時,左手中的牌都是排好序的。

這個算法中,所有的元素都是原地排序(sorted in place),就意味著這些數字就是在數組本身中重新排序的。

算法如下:
        1、數組被分為兩部分,一部分為排好序的,一部分為未排好序。
        2、選取一個key值,就是將要排序的元素,通過比較方式,將其插入到已排好順序的部分。
        3、循環處理,直到該數組全部排好序。

偽代碼:

代碼(c語言實現):

//a 是一個數組,size_a是這個數組的元素個數
        void insertion_sort( int * a, int size_a){

                int i,j;
                int key = 0 ;

                for (j = 1 ;j < size_a;j ++ ){

                        key = a[j];
                        i = j - 1 ;
                        while (i > = 0 << a[i] > key){
                                a[i + 1 ] = a[i];
                                i = i - 1 ;
                        }
                        a[i + 1 ] = key;
                }

                return ;
        }

插入排序算法的時間復雜度是O(n 2 ) 。當然算法的執行速度,和n的大小(輸入規模)以及樣本的結構有關系。考慮壞的情況,就是輸入的n個數為逆序排列,此時插入排序算法,隨著n的增大,運算時間的增長與 n 2 同數量級。

2.分治法策略
        很多算法在結構上是遞歸的:為了解決一個給定的問題,算法要一次或多次地遞歸調用其自身來解決相關的子問題。這些算法通常采用分治策略:將原問題劃分為n個規模較小而結構與原問題相似的子問題;遞歸地解決這些子問題,然后再合并其結果,就得到原問題的解。         分治模式在每一層遞歸上都有三個步驟:

分解(divide):講原有問題分解成為一系列子問題;
        解決(Conquer):遞歸地解各子問題。若子問題足夠小,則直接求解;
        合并(Combine):講子問題的結果合并成原問題的解。

合并排序
        合并排序的關鍵步驟在于合并步驟中的合并兩個已排序子序列。為做合并,引入一個輔助過程merge(a,p,q,r),其中a是一個數組,p,q和r是下標,滿足p <=q< r。該過程的子數組 a[p...q]和a[q+1.... r] 都已排好序,并將他們合并成一個已排好的子數組代替當前子數組a[p.....r]。

merge過程的代價是O(n)。其中n = r - p + 1是待合并的元素個數。
        以下為合并的偽代碼:

為了能檢查兩個子數組是否是空,其想法是在每一個數組底部放一個“哨兵”,它包含了特殊值,用于簡化代碼。

具體來說,merge過程是這樣工作的:第一行計算子數組a[p...q]的長度n1,第二行計算子數組a[q+1...r]的長度n2.在第三行中,創建了數組L和R,長度各位n1 +1,n2 + 1.第四到第五行中的for循環將子數組a[p...q]復制到L[1....n1]中去。 第六到第七行中的for循環將子數組a[q+1...r]復制到R[1....n2]中去。第八九行講哨兵置于L和R的末尾。第十到第十七行,是合并的具體過程。通過比較,將兩子數組按照從小到大的方式合并,存入數組A中。

c語言描述如下所示

void merge( int * a, int p, int q, int r){

                int n1 = q - p + 1 ;
                int n2 = r - q;
                //為左數組和右數組分配空間,為max預留空間。
                //max為哨兵,標志數組的結束。
                int * L = ( int * )malloc( sizeof ( int ) * (n1 + 1 ));
                int * R = ( int * )malloc( sizeof ( int ) * (n2 + 1 ));

                for ( int i = 0 ;i < n1;i ++ ){
                        L[i] = a[p + i];
           &nnbsp;    }

                for ( int i = 0 ;i < n2;i ++ ){
                        R[i] = a[q + i + 1 ];
                }

                L[n1] = MAX;
                R[n2] = MAX;
                //從小到大將左數組和友數組合并。
                int i,j,k;
                for (i = 0 ,j = 0 ,k = p;k < = r;k ++ ){
                        if (L[i] < = R[j]){
                                a[k] = L[i];
                                i ++ ;
                        } else {
                                a[k] = R[j];
                                j ++ ;
                        }
                }
                free(L);
                L = NULL;
                free(R);
                R = NULL;
                return ;
        }

合并merge過程就可以作為合并排序中的一個子程序來使用。偽代碼如下:

c語言描述過程為:

void merge_sort( int * a, int p, int r){
                int q = 0 ;

                if (p < r){
                         q= (p + r) / 2 ;
                        merge_sort(a,p,q);
                      &nbsnbsp; merge_sort(a,q + 1 ,r);
                        merge(a,p,q,r);
                }
                return ;
        }

合并程序的具體圖示:

關于分治法排序的簡要分析:

我們將一個規模為n的問題,拆分成n個規模為1的子問題。拆分的過程經歷了 lg n + 1層,在合并時,每一層的問題規模為n,則總代價為O (n * lg n + n ) ,忽略低階項和常數項,因此合并排序法的時間復雜度為O(n lg n )。

接下來會介紹一下堆排序和快速排序。以上的所有排序方法,都是比較排序。也就是說,他們通過對數組元素比較來實現排序。比較排序法是有極限的,從壞的輸入情況,比較排序法的時間復雜度是 O(n lg n )。我們介紹的合并排序以及快速排序,都是漸進優的比較排序方式。我們還會介紹可以突破比較排序極限的排序方式——計數排序。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 临沂网站建设,临沂网站制作,临沂网络公司,临沂小程序开发,临沂网站设计,沂水网站建设,沂南网站建设,蒙阴网站建设,平邑网站建设,费县网站建设,兰陵网站建设,郯城网站建设,临沭网站建设,莒南网站建设,兰山网络公司 | 四川教师资格网-四川教师资格考试网 | 余压控制器,余压监控系统,余压传感器-浙江巨川电气科技有限公司 | 郑州阳光房|封阳台|钢结构【河南郑州如意阳光房门窗有限公司】 | 专业提供医疗器械,医疗设备,进口国产医疗设备,医疗耗材采购,医疗设备厂家等医疗器械信息-上海聚慕医疗器械有限公司 | 鹰潭代理记账公司_鹰潭代理记账_鹰潭注册公司-鹰潭市新知会计服务有限公司 | 领先的木工机械生产厂家,原木加工流水线,立式带锯机,数控木工跑车-邢台亚士达机械制造有限公司 | 钕铁硼-强力磁铁-永磁铁「聚盛磁铁」10年定制加工生产厂家 | 桥梁支座更换_桥梁检测车租赁_高空作业车出租_支座更换_伸缩缝安装_隧道防水_养护加固_维修_出租_衡水庆兴桥梁养护工程有限公司 桥梁养护|桥梁维修加固|隧道裂缝修补|支座更换|管道堵水气囊|衡水众拓路桥养护有限公司 | 河南反渗透设备-河南EDI超纯水设备-郑州纯净水设备-郑州友邦水处理设备有限公司 | 蜀山人才网_蜀山招聘网_求职找工作平台 | 心理咨询室设备_音乐放松椅_心理测评系统_情绪宣泄设备厂家 | 麦秸映像网络技术有限公司,河南省政府采网入驻对接,新乡网站维护建设,小程序开发,APP定制开发,钉钉开发,新乡软件开发等相关网络业务 | 耐磨陶瓷涂料_耐磨防腐涂料_KNM防腐陶瓷涂料-北京耐默 | 湖南净声源环保科技有限公司是一家专业从事噪声治理和建筑声学设计生态环境综合治理服务的企业,专业从事株洲电梯隔音治理,湘潭中央空调降噪处理,衡阳邵阳冷却塔噪音治理,岳阳常德大型风机噪声隔音降噪,张家界空压机噪声治理,益阳配电房变压器噪声治理,专业郴州永州工厂企业车间噪声治理,怀化娄底专业机械设备减振降治理,武汉噪音治理隔音降噪公司,孝感噪音治理,立式球磨机的噪声控制,专业隔音降噪公司,、以及各类机械动力设备减振降噪噪声治理的公司,同时为客户提供咨询与解决方案 | 树枝粉碎机,锯末机,木材粉碎机的专业生产厂家利鑫机械,问价格找利鑫 | 漫画大全免费看_漫画终身版_羞羞漫画网 | 消泡剂_有机硅消泡剂_分散剂_流平剂_氟碳表面活性剂-上海梓意化工有限公司 | 金酱酒_金酱酒代理加盟招商_OEM贴牌企业定制! – 金酱酒代理加盟!茅台镇较早的酿酒烧坊,年产优质酱香白酒5000余吨,仁怀市十强白酒企业,主营主品:金酱酒、金酱陈香酒、酱香老酒等系列品牌产品 | 水表_智能电表_抄表软件_ic卡水控机_电磁水表厂家-深圳市华熙仪数码科技有限公司 | 皮带清扫器-皮带聚氨酯合金空段输送带清扫器刮刀厂家-衡水格锐特机械科技有限公司 | 硫酸、硫酸铵、氯磺酸、氯化亚砜、硫酸钾、对位酯生产销售 - 河北和合化工有限公司 | 校园防欺凌|视频一键式报警器|防霸凌报警柱|停车场语音对讲|商铺联网报警|应急广播音柱|居家养老一键通|盾王可视联网运营中心 | 衡水一体化污水处理设备|循环水旁滤器|加药装置|钢厂浊环净化装置|河北欧意科技集团有限公司 | 叶片泵,液压电机,油泵电机,变量叶片泵,油压电机-广东俊泰液压科技有限公司 | 长沙市富巴机电设备有限公司-长期销售施能,霍尼韦尔,霍科德,意莱克斯,台仪,泛达 | 水硬度在线分析仪-氟离子|悬浮固体浓度分析仪-ldo分析仪-上海植茂 | 上海海外置业展_2024海外置业移民留学展_4月5-7日_企业参展处/免费领门票 | 徐州恒铭机械设备有限公司_装载机配件_压路机配件_起重机配件_挖掘机配件_配件_徐州恒铭机械设备有限公司 | 食品甲醛测定仪,啤酒甲醛测定仪,食盐碘测定仪,食品细菌检验仪,水质细菌检验仪-厦门欣锐仪器仪表有限公司 | 威海实木家具-威海定制家具-威海家具-威海至佳百隆家具有限公司 威海木箱,威海木托盘,威海免熏蒸包装箱-威海耀晟木制品有限公司 | 景县泉兴永塔业有限公司-广播电视塔、通信塔、电力塔、交通设施、监控杆塔、气象塔、森林防火瞭望塔、避雷塔、烟筒塔、训练塔 | 深圳市福田区建筑装饰设计协会| 离婚协议书怎么写_离婚协议书模板标准版_离婚协议书范本下载 - 离婚协议书 | 真石漆-防火涂料-氟碳漆-地坪漆-广田外墙涂料 | 昆明护栏网厂家_隔离栅_围栏网_石笼网「13年生产经验」-云南北辛商贸 | 郑州空气能热水器,郑州空气能热水器经销商,郑州空气能热水器维修,郑州空气能热水器安装 | 专业无机盐,化工产品检测公司,水处理剂检测公司,第三方水质检测机构—准诺检测 | 蒸汽发生器-电加热蒸汽发生器、燃油蒸汽发生器、燃气蒸汽发生器设备厂家-诺贝思蒸汽发生器 | 康拓威技术(深圳)有限公司|Theia镜头代理商|安讯士AXIS摄像机|安讯士监控系统|博世BOSCH监控|博世会议系统|索尼SONY监控|松下PANASONIC监控|三星韩华SAMSUNG监控|霍尼韦尔Honeywell|海康|大华|华为监控|Theia无畸变镜头|AXIS监控|安讯视摄像机 | 吸音板_隔音板多少钱_降噪声学材料_环保阻燃防火_吸声装饰工程定制_厂家价格直供 - 佛山天阶声学材料厂 |