国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序

這篇具有很好參考價(jià)值的文章主要介紹了Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.排序

1.什么是穩(wěn)定性

假定在待排序的記錄序列中,存在多個(gè)具有相同的關(guān)鍵字的記錄,若經(jīng)過(guò)排序,這些記錄的相對(duì)次序保持
不變,即在原序列中, r[i]=r[j] ,且 r[i] r[j] 之前,而在排序后的序列中, r[i] 仍在 r[j] 之前,則稱這種排序算法是穩(wěn)
定的;否則稱為不穩(wěn)定的。

2.分類

內(nèi)部排序 :數(shù)據(jù)元素全部放在內(nèi)存中的排序。
外部排序 :數(shù)據(jù)元素太多不能同時(shí)放在內(nèi)存中,根據(jù)排序過(guò)程的要求不能在內(nèi)外存之間移動(dòng)數(shù)據(jù)的排序。(實(shí)際上就是數(shù)據(jù)再磁盤上存儲(chǔ))。

二.插入排序

1.直接插入排序

原理:當(dāng)插入第i個(gè)數(shù)時(shí),前面i-1個(gè)數(shù)據(jù)已經(jīng)排好序了。只要用第i個(gè)數(shù)據(jù)和第i-1,i-2,i-3個(gè)數(shù)據(jù)依次進(jìn)行比較,找到合適的位置插入,后面的數(shù)據(jù)一次后移即可

例如1,3,2,24,35,11 從大到小排,從第二個(gè)數(shù)開始定義一個(gè)臨時(shí)變量tmp存放要排的數(shù)據(jù)3,此時(shí)1下標(biāo)就是空的,定義一個(gè)i表示要進(jìn)行比較的數(shù)的下標(biāo),此時(shí)i=0,3和1比,3大,所以把1放到1下標(biāo),i向前走發(fā)現(xiàn)i<0了,所以i就不向前走了,把tmp的值就放到i下標(biāo);假設(shè)11以前都排好了,即35,24,3,2,1,11,現(xiàn)在排11,tmp=11,初始i=4,tmp與4下標(biāo)的數(shù)比較,11比1大,所以1放到5下標(biāo),i再向前走,11比2大,所以2放到4下標(biāo)(即i-1下標(biāo)),i再向前走,11比3大,所以3放到3下標(biāo)(即i-1下標(biāo)),i再向前走,24比11小,所以把11也就是tmp的值放到2下標(biāo)(即i-1下標(biāo))。

代碼如下

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N^2);因?yàn)楸容^次數(shù)是依次遞增,即1+2+3+4+……+(n-1).

2.空間復(fù)雜度:O(1);因?yàn)樵摯a使用的變量是常數(shù)個(gè)。

3.穩(wěn)定性:穩(wěn)定的

4.元素集合越接近有序,需要比較的次數(shù)就越少,時(shí)間效率就越高。比如從小到大排序1,2,3,4,5,已經(jīng)有序了,只需遍歷到每個(gè)元素即可,不需要回退,此時(shí)時(shí)間復(fù)雜度為O(N)。

5.適用于待排序序列已經(jīng)基本接近有序

2.希爾排序(直接插入排序的優(yōu)化)

希爾排序法又稱為縮小增量排序法,把一組數(shù)分為若干組,每組進(jìn)行直接插入排序

例如下圖:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java
第一趟分為五組,即gap組,每組倆個(gè)元素,這倆個(gè)元素之間的距離就是gap,即5;讓i=5,即i=gap,指向4,讓j=i-gap,即0,j下標(biāo)和i下標(biāo)的值進(jìn)行比較交換,然后j-=gap,但這樣j就成了負(fù)數(shù)了,所以這一組比較完了,i++;i=6,j=i-gap=1,再比較,再交換……
第二趟分為倆組,每組五個(gè)元素,每個(gè)元素之間的距離為gap,即2,讓i=gap即2,指向數(shù)據(jù)1,讓j=i-gap,即0,比較,交換;i++(注意不是i+=gap,因?yàn)檫@樣會(huì)導(dǎo)致跳過(guò)一組)
代碼如下:
Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java
總結(jié)

1.時(shí)間復(fù)雜度:尚未有明確的規(guī)定,可以是n^1.3~n^1.6,也可以是n^1.25~1.6*n^1.25。

2.空間復(fù)雜度:O(1)。因?yàn)橐恢笔窃谠瓟?shù)組上進(jìn)行操作,沒(méi)有額外開辟空間

3.穩(wěn)定性:不穩(wěn)定,原因是存在不相鄰記錄的交換。比如1,5,3,3,4,6,分成倆組進(jìn)行從小到大排序,第一組是1,3,4,不用交換,第二組是5,3,6,需要交換變成3,5,6,這就導(dǎo)致第二個(gè)3跑到了第一個(gè)3的前面

三.選擇排序

1.直接選擇排序

定義一個(gè)i,從0下標(biāo)開始遍歷數(shù)組;再定義一個(gè)minindex,初始值為i,從i+1下標(biāo)開始到n-1,每次將該下標(biāo)的值與minindex下標(biāo)的值進(jìn)行比較,如果小于minindex下標(biāo)的值,就將minindex更新為當(dāng)前下標(biāo),最后將minindex與i下標(biāo)的值進(jìn)行交換,i++,到最后,該數(shù)組就是從小到大排序。代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N^2)

2.空間復(fù)雜度:O(1)

3.穩(wěn)定性:不穩(wěn)定,比如5,8,5,1,7要從小到大排序,我們知道,第一趟結(jié)束,5會(huì)和1進(jìn)行交換,這是第一個(gè)5就到了第二個(gè)5之后,所以不穩(wěn)定。

4.缺點(diǎn):對(duì)于已經(jīng)有序的數(shù)組,它還是會(huì)無(wú)腦的遍歷從i到n-1的每一個(gè)數(shù)據(jù),導(dǎo)致無(wú)論是最好情況下還是最壞情況下,都是O(N^2)。

2.雙向選擇排序

定義maxindex和minindex,定義left=0,right=arr.length-1,初始maxindex和minindex都等于left,然后遍歷left到right下標(biāo)的值,更新maxindex和minindex,最后將left下標(biāo)與minindex下標(biāo)的值進(jìn)行交換,將right下標(biāo)與maxindex下標(biāo)的值進(jìn)行交換,然后left++,right--。

代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

但注意,這段代碼有問(wèn)題,如果maxindex就是left,那么mindex與left交換之后,maxindex指向的就是最小值了,直接讓maxindex與right交換就會(huì)出問(wèn)題,所以進(jìn)行如下改進(jìn):

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N^2)

2.空間復(fù)雜度:O(1)

3.穩(wěn)定性:不穩(wěn)定

3.堆排序

排升序建立大堆,排降序建立小堆。以升序?yàn)槔憾x一個(gè)end,初始指向arr.length-1,將大根堆的0下標(biāo)元素與end指向的元素交換,此時(shí)end下標(biāo)的元素就是有序的,再將0下標(biāo)元素進(jìn)行向下調(diào)整(范圍是0~end);然后end--,再與0下標(biāo)的值進(jìn)行交換,再向下調(diào)整……

代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N*log2N)。因?yàn)橄蛳陆ǘ训臅r(shí)間復(fù)雜度為O(N),而從0到end進(jìn)行向下調(diào)整的全過(guò)程的時(shí)間復(fù)雜度為O(N*log2N),所以O(shè)(N)可以忽略不記,只記O(N*log2N)

2.空間復(fù)雜度:O(1)。

3.穩(wěn)定性:不穩(wěn)定。

四.交換排序

1.冒泡排序

代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

優(yōu)化:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N^2)。

2.空間復(fù)雜度:O(1)。

3.穩(wěn)定性:穩(wěn)定。

2.快速排序

其基本思想為: 任取待排序元素序列中的某元 素作為基準(zhǔn)值,按照該排序碼將待排序集合分割成兩子序列,左子序列中所有元素均小于基準(zhǔn)值,右子序列中所有 元素均大于基準(zhǔn)值,然后最左右子序列重復(fù)該過(guò)程,直到所有元素都排列在相應(yīng)位置上為止 。
將區(qū)間按照基準(zhǔn)值劃分為左右兩半部分的方式有Hoare版,挖坑法,前后指針?lè)?,下面依次介紹:

(1).Hoare版

以0下標(biāo)的數(shù)為基準(zhǔn)值,初始化left=1,right=arr.length-1,right先向左移動(dòng),找到比0下標(biāo)小的數(shù)就停止,然后left向右移動(dòng),找到比0下標(biāo)的值大的數(shù)就停止,之后left和right下標(biāo)的值進(jìn)行交換,然后再讓right移動(dòng),left移動(dòng),重復(fù)上述過(guò)程,直到left和right相遇時(shí),設(shè)相遇時(shí)的下標(biāo)為flag,就將0下標(biāo)的值與flag下標(biāo)的值進(jìn)行交換;然后進(jìn)行遞歸,就是讓flag的左邊和右邊都進(jìn)行Hoare版的快速排序。代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

注意:必須先讓right找小的,因?yàn)樽罱K是left與right相遇的地方即flag和0下標(biāo)交換,此時(shí)原來(lái)0下標(biāo)的值就在原來(lái)flag下標(biāo)的值的右邊,如果先讓left找大數(shù),就可能會(huì)導(dǎo)致把比基準(zhǔn)值大的數(shù)放到了基準(zhǔn)值的左邊,而先讓right找就沒(méi)問(wèn)題

(2).挖坑法

先將第一個(gè)數(shù)據(jù)存放在臨時(shí)變量key中,形成一個(gè)坑位,然后right向左走,找到比key小的數(shù),拿起來(lái)放到0下標(biāo)處,此時(shí)的坑位轉(zhuǎn)移到了right下標(biāo),然后讓left向右走,找到比key大的數(shù),將它拿起來(lái)放到right下標(biāo),此時(shí)坑位轉(zhuǎn)移到了left處,依此類推,直到left與right相遇后將key的值放到相遇處,并以相遇處為分割線進(jìn)行左右遞歸,代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

注意,必須是arr[right]>=key,等號(hào)不可以忽略,否則就會(huì)死循環(huán)。比如6,1,3,4,7,6,left=0,right=5,6大于6嗎?不大于,所以第一個(gè)while進(jìn)不去,所以將right的值給到left下標(biāo),即6和6進(jìn)行交換,然后進(jìn)行第二個(gè)while的判斷,又進(jìn)不去,所以又交換……一直這樣死循環(huán)。

(3).前后指針?lè)?/h4>

定義key指向0下標(biāo),初始化prev指向0,初始化cur指向0,cur往后走找到一共比key指向的數(shù)據(jù)小的值時(shí)停止,然后prev先++,如果prev和cur指向的不是同一個(gè)數(shù),就讓prev指向的數(shù)與cur指向的數(shù)交換,然后cur再去找下一個(gè)比key小的數(shù),直到cur走到頭后,讓key下標(biāo)的值與prev下標(biāo)的值進(jìn)行交換,返回prev,再以prev為基準(zhǔn),左右向這樣去遞歸。代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

總結(jié)

1.時(shí)間復(fù)雜度:O(N*log2N)。這可以說(shuō)是最好情況下是O(N*log2N),即每一次找到的flag都是在這組數(shù)據(jù)的中央,第一層是一整組,共n個(gè)數(shù)據(jù),都要遍歷到;第二層是從中央的flag分開成倆組,每組n/2個(gè)數(shù)據(jù),都要遍歷到……一共有l(wèi)og2n層,每層都是遍歷到n個(gè)數(shù)據(jù),所以是O(N*log2N)

而最壞情況下是O(N^2),即每次找到的flag都是第一個(gè)數(shù)據(jù),導(dǎo)致沒(méi)有左邊,只有右邊,所以這種情況下是:第一層遍歷n個(gè)數(shù)據(jù)進(jìn)行比較,第二層是n-1個(gè)數(shù)據(jù),第三層是n-2個(gè)數(shù)據(jù)……一共是n層。

2.空間復(fù)雜度:O(log2N)。這主要與函數(shù)的遞歸調(diào)用有關(guān)。實(shí)際上,O(log2N)是最好情況下,也就是每次找到的基準(zhǔn)值的下標(biāo)都是中間值,所以先對(duì)基準(zhǔn)值的左邊進(jìn)行遞推,一共log2n層,所以在棧上開辟了log2n個(gè)空間,然后回退,直到把左邊遞歸完,再此同時(shí)把這log2n個(gè)空間回收,然后對(duì)右邊進(jìn)行遞歸,又是開辟log2n個(gè)空間……總的來(lái)說(shuō)就是O(log2N)

最壞情況下就是基準(zhǔn)值一直是第一個(gè),導(dǎo)致一共要開辟n個(gè)空間,所以是O(N)。

3.穩(wěn)定性:不穩(wěn)定,比如6,7,3,4,5,10,3,第一次就是7和最后一個(gè)3進(jìn)行交換,導(dǎo)致倆個(gè)3的位置發(fā)生了改變

4.缺點(diǎn):當(dāng)數(shù)組數(shù)據(jù)過(guò)多,遞歸次數(shù)過(guò)大時(shí),可能會(huì)造成棧溢出

3.快速排序的優(yōu)化

出發(fā)點(diǎn):減少遞歸的次數(shù),也就是盡量讓數(shù)組變成一棵完全二叉樹,讓基準(zhǔn)值盡量為中間值

(1).三數(shù)取中法選基準(zhǔn)

定義left,right,再定義mid=(left+right)/2,選取三個(gè)下標(biāo)對(duì)應(yīng)的數(shù)中的中位數(shù),將其與left下標(biāo)的數(shù)進(jìn)行交換,然后再用上面的三個(gè)方法返回flag下標(biāo),再去遞歸,這樣可以減少基準(zhǔn)值總是在頭或尾的情況。代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

(2).遞歸到小的子區(qū)間時(shí),可以用直接插入排序

就是說(shuō),越往下遞歸,數(shù)據(jù)越有序,選擇直接插入排序的時(shí)間效率就會(huì)越高,所以可以在三數(shù)取中法的基礎(chǔ)上再如下優(yōu)化:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

(3).非遞歸的快速排序

用到了棧。首先定義start和end,先找到基準(zhǔn)值的下標(biāo),然后將基準(zhǔn)值左半部分的開頭和結(jié)尾的下標(biāo)存到棧中,再將基準(zhǔn)值右半部分的開頭和結(jié)尾的下標(biāo)存到棧中,注意,如果基準(zhǔn)值左側(cè)不夠倆個(gè)元素,就不能將左側(cè)的開頭和結(jié)尾的下標(biāo)存到棧中,右邊也同理(如果flag-1>start,就說(shuō)明左邊夠倆個(gè)元素,如果flag+1小于end,就說(shuō)明右邊夠倆個(gè)元素)。然后彈出一個(gè)數(shù)給到end,再?gòu)棾鲆还矓?shù)給到start,再去找基準(zhǔn)值,以此進(jìn)行循環(huán),而不是遞歸,直到棧為空。

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

五.歸并排序

歸并排序( MERGE-SORT )是建立在歸并操作上的一種有效的排序算法 , 該算法是采用分治法( Divide and Conquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為二路歸并。

1.遞歸實(shí)現(xiàn)歸并排序

對(duì)于一個(gè)數(shù)組1,6,5,2,3,7,4,9,先將它分裂,分成左右倆半,再將左邊分成左右倆半,再將右邊分成左右倆半,直到每組只有一個(gè)數(shù)據(jù),然后讓每組先在內(nèi)部進(jìn)行排序,然后左右倆組再進(jìn)行排序(此時(shí)就是倆個(gè)有序數(shù)組的排序,叫做二路歸并)。

代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

起初start=0,end=arr.length-1,然后進(jìn)行分裂,最后回歸后進(jìn)行二路歸并。二路歸并代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

對(duì)于已經(jīng)有序的倆個(gè)數(shù)組,比如:1,4,6,7和2,3,5,9,定義s1,e1,s2,e2,比較s1,s2對(duì)應(yīng)的數(shù),如果s1小,就將s1對(duì)應(yīng)的數(shù)拷貝到tmp數(shù)組,然后s1++,反之s2++。直到s1>e1或s2>e2時(shí)結(jié)束,此時(shí)如果s1<=e1,說(shuō)明左面的數(shù)還沒(méi)有完全拷貝到tmp中,因?yàn)橐呀?jīng)有序,所以直接拷貝即可,反之操作s2

總結(jié)

1.時(shí)間復(fù)雜度:O(Nlog2N)。這個(gè)數(shù)組最終被拆成了一棵完全二叉樹,所以一共經(jīng)歷了log2N層,在回退進(jìn)行二路歸并時(shí),每層都遍歷了n個(gè)元素,所以是O(log2N)。

2.空間復(fù)雜度:O(log2N)。一共log2N層,就是開辟了log2N個(gè)空間后才開始回收空間去遞歸另一邊。

3.穩(wěn)定性:穩(wěn)定

2.非遞歸實(shí)現(xiàn)歸并排序

先一個(gè)一個(gè)有序,然后倆個(gè)倆個(gè)有序,然后四個(gè)四個(gè)有序……

代碼如下:

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

比如數(shù)組1,4,2,3,6,5,3,2,首先每組一個(gè)數(shù)據(jù),已經(jīng)有序,所以從每組兩個(gè)數(shù)據(jù)開始,14,23,65,32,left=i,right=i+gap-1,二路歸并后得到14,23,56,23,然后變成每組四個(gè)數(shù),即1423,5623,進(jìn)行二路歸并排序(第一路是left到mid,第二路是mid+1到right),得到1234,2356,最后gap=8,再排序。但這樣的代碼有錯(cuò)誤,對(duì)于數(shù)組長(zhǎng)度不是2^n的就不適用,比如1,4,2,6,5,3,共6個(gè)數(shù),gap=2時(shí)變成14,26,35,然后當(dāng)gap=4時(shí),i初始為0,i+=gap得到4,那么第二組的left=4,right=7超了,所以right變成5,同理mid也是5,排完變成1246,35,最后按理說(shuō)應(yīng)該再對(duì)整體排序,但gap=8超過(guò)數(shù)組長(zhǎng)度了,所以最后一組排序沒(méi)有正常進(jìn)行,所以這個(gè)代碼不適用

代碼修改:真正實(shí)現(xiàn)顯性的兩個(gè)有序數(shù)組的合并,即每次i+=gap*2,直接倆組倆組的操作

Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序,數(shù)據(jù)結(jié)構(gòu),排序算法,java

對(duì)于數(shù)組3,1,2,5,7,1,首先gap=1,分成每組一個(gè),已經(jīng)有序,然后倆組倆組進(jìn)行二路歸并排序,首先是第1,2組,left=0,mid=0,right=1,……得到13,25,17,然后gap=2,即每組倆個(gè)數(shù),兩組進(jìn)行歸并排序,前倆組得到1235,后面i=4時(shí),left=4,mid=5,right=8,right超了,所以變成right=5,再去歸并排序,此時(shí)的倆個(gè)有序數(shù)組是17和空數(shù)組;最后gap=4,i=0時(shí),left=0,mid=3,right=7超了,所以right=5,此時(shí)的倆個(gè)有序數(shù)組是1235和17,再去二路歸并排序。這樣就能全部排好序了

我們不難發(fā)現(xiàn),改進(jìn)后的代碼中l(wèi)eft和mid恰好是第一個(gè)有序數(shù)組的首尾,mid+1和right正好是第二個(gè)有序數(shù)組的首尾,而且第二個(gè)有序數(shù)組的長(zhǎng)度可以小于gap甚至為0。而之前的代碼可能排序不完善文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-824674.html

到了這里,關(guān)于Java基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java數(shù)據(jù)結(jié)構(gòu)與算法】Day2-高級(jí)排序(希爾、歸并、快速、計(jì)數(shù))

    【Java數(shù)據(jù)結(jié)構(gòu)與算法】Day2-高級(jí)排序(希爾、歸并、快速、計(jì)數(shù))

    ?作者簡(jiǎn)介:熱愛(ài)Java后端開發(fā)的一名學(xué)習(xí)者,大家可以跟我一起討論各種問(wèn)題喔。 ??個(gè)人主頁(yè):Hhzzy99 ??個(gè)人信條:堅(jiān)持就是勝利! ??當(dāng)前專欄:【Java數(shù)據(jù)結(jié)構(gòu)與算法】 ??本文內(nèi)容:Java數(shù)據(jù)結(jié)構(gòu)與算法中的比較高級(jí)的排序,希爾排序、歸并排序、快速排序、計(jì)數(shù)排序

    2024年02月02日
    瀏覽(34)
  • 【算法基礎(chǔ)】java基礎(chǔ)——基本結(jié)構(gòu)、數(shù)據(jù)類型、表達(dá)式、語(yǔ)句

    Java程序的基本結(jié)構(gòu): ? ? ? ? 一段Java程序或者一個(gè)靜態(tài)庫(kù),會(huì)用到下面7種語(yǔ)法 ? ? ? ? 1、原始數(shù)據(jù)類型:在計(jì)算機(jī)程序中精確到定義整數(shù)、浮點(diǎn)數(shù)、布爾值等 ? ? ? ? 2、語(yǔ)句:通過(guò)創(chuàng)建變量并對(duì)其賦值,它們能夠被組合為類似數(shù)學(xué)公式定義的表達(dá)式 ? ? ? ? 3、數(shù)組 ?

    2024年01月16日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之排序算法

    在數(shù)據(jù)結(jié)構(gòu)中,常見的排序算法有以下幾種: 冒泡排序(Bubble Sort):通過(guò)比較相鄰元素并交換它們的位置,每輪將最大(或最?。┑脑孛芭莸侥┪?,重復(fù)執(zhí)行直到排序完成。 特點(diǎn):簡(jiǎn)單易懂,但對(duì)于大型數(shù)據(jù)集效率較低。 時(shí)間復(fù)雜度: 最優(yōu)情況:O(n)(當(dāng)數(shù)組已經(jīng)排序好

    2024年02月15日
    瀏覽(25)
  • 《數(shù)據(jù)結(jié)構(gòu)與算法》之十大基礎(chǔ)排序算法

    《數(shù)據(jù)結(jié)構(gòu)與算法》之十大基礎(chǔ)排序算法

    冒泡排序是一種交換排序,它的思路就是在待排序的數(shù)據(jù)中,兩兩比較相鄰元素的大小,看是否滿足大小順序的要求,如果滿足則不動(dòng),如果不滿足則讓它們互換。 然后繼續(xù)與下一個(gè)相鄰元素的比較,一直到一次遍歷完成。一次遍歷的過(guò)程就被成為一次冒泡,一次冒泡的結(jié)束

    2024年02月05日
    瀏覽(24)
  • C++基礎(chǔ)-介紹·數(shù)據(jù)結(jié)構(gòu)·排序·算法

    C++是一門風(fēng)格嚴(yán)謹(jǐn)又不失自由的開發(fā)語(yǔ)言,提供了完整的內(nèi)存管理、支持函數(shù)式編程和面向?qū)ο缶幊蹋С帜0?、多繼承、多實(shí)現(xiàn)、重載、重寫等多態(tài)特性。 優(yōu)勢(shì)在于目前90%的操作系統(tǒng)、數(shù)據(jù)庫(kù)、應(yīng)用基礎(chǔ)架構(gòu)、硬件嵌入式等都是使用C/C++制作的,而C++是對(duì)C的標(biāo)準(zhǔn)擴(kuò)展,掌握

    2024年02月03日
    瀏覽(33)
  • 數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(王卓)(28):排序概述(分類)、直接插入排序思路

    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(王卓)(28):排序概述(分類)、直接插入排序思路

    目錄 排序分類:(本章目錄) 按數(shù)據(jù)存儲(chǔ)介質(zhì):(學(xué)習(xí)內(nèi)容) 內(nèi)部排序: 外部排序: 按比較器個(gè)數(shù):(學(xué)習(xí)內(nèi)容) 串行排序: 并行排序: 按主要操作:(學(xué)習(xí)內(nèi)容、里面的排序都會(huì)重點(diǎn)學(xué)) 比較排序: 基數(shù)排序: 按輔助空間: 原地排序: 非原地排序: 按穩(wěn)定性: 穩(wěn)

    2023年04月26日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu)-冒泡排序Java實(shí)現(xiàn)

    ????冒泡排序是一種基礎(chǔ)的比較排序算法,它的思想很簡(jiǎn)單:重復(fù)地遍歷待排序的元素列表,比較相鄰元素,如果它們的順序不正確,則交換它們。這個(gè)過(guò)程不斷重復(fù),直到整個(gè)數(shù)組都排序好。冒泡排序的時(shí)間復(fù)雜度為O(n^2),因此不適用于大規(guī)模數(shù)據(jù)集,但對(duì)于小型數(shù)據(jù)集

    2024年02月08日
    瀏覽(24)
  • Java 與數(shù)據(jù)結(jié)構(gòu)(6):快速排序

    Java 與數(shù)據(jù)結(jié)構(gòu)(6):快速排序

    ChatGPT 中文指南(大全) 內(nèi)容包含:如何開通chatgpt、chatgpt的同類站點(diǎn)、prompts 、AI繪圖、ChatGPT 工具、相關(guān)報(bào)告論文、ChatGPT應(yīng)用項(xiàng)目等 鏈接:ChatGPT 中文指南(大全) 指令指南,精選資源清單,更好的使用 chatGPT 讓你的生產(chǎn)力up up up! 快速排序(Quick Sort)是一種基于分治思想的排序

    2024年02月07日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)中的七大排序(Java實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)中的七大排序(Java實(shí)現(xiàn))

    目錄 一、直接插入排序 二、希爾排序 三、直接選擇排序 四、堆排序 五、冒泡排序 六、快速排序 七、歸并排序 ? ? ? ? ? ? ? 定義i下標(biāo)之前的元素全部已經(jīng)有序 ,遍歷一遍要排序的數(shù)組,把i下標(biāo)前的元素全部進(jìn)行排序,當(dāng)遍歷玩這個(gè)數(shù)組后,就已經(jīng)排好序了。 ? ? ? ?

    2024年02月08日
    瀏覽(24)
  • Java數(shù)據(jù)結(jié)構(gòu)之排序(頭歌平臺(tái),詳細(xì)注釋)

    Java數(shù)據(jù)結(jié)構(gòu)之排序(頭歌平臺(tái),詳細(xì)注釋)

    目錄 第1關(guān):選擇排序 任務(wù)描述 相關(guān)知識(shí) 代碼:?? ?第2關(guān):插入排序 任務(wù)描述 相關(guān)知識(shí) 插入排序 代碼:?? 第3關(guān):歸并排序 任務(wù)描述 相關(guān)知識(shí) 歸并排序 原理 代碼:?? ?第4關(guān):快速排序 任務(wù)描述 相關(guān)知識(shí) 快速排序 代碼:?? ?第5關(guān):堆排序 任務(wù)描述 相關(guān)知識(shí) 堆

    2024年01月19日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包