




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數據結構(數據結構(Java版)版)葉核亞葉核亞數據結構(數據結構(Java版)版) 第1章 緒論 第2章 線性表第3章 排序 第4章 棧與隊列 第5章 數組和廣義表 第6章 樹和二叉樹 第7章 查找 第8章 圖 第9章 綜合應用設計第3章 排序 3.1 排序的基本概念 3.2 插入排序 3.3 交換排序 3.4 選擇排序 3.5 歸并排序數據結構(Java版)葉核亞3.1 排序的基本概念1數據序列數據序列(datalist)是待排序的數據元素的有限集合。2關鍵字通常數據元素由多個數據項組成,以其中某個數據項作為排序依據,則該數據項稱為關鍵字(key)。 3排序算法的穩(wěn)定性在數據序列中,如果有
2、兩個數據元素ri和rj,它們的關鍵字ki等于kj,且在未排序時,ri位于rj之前。如果排序后,元素ri仍在rj之前,則稱這樣的排序算法是穩(wěn)定的(stable),否則是不穩(wěn)定的排序算法。數據結構(Java版)葉核亞4內排序與外排序n內排序:在待排序的數據序列中,數據元素個數較少,整個排序過程中所有的數據元素都可以保留在內存,則這樣的排序稱為內排序。n外排序:待排序的數據元素非常多,以至于它們必須存儲在磁盤等外部存儲介質上,則這樣的排序稱為外排序。顯然,外排序過程中需要多次訪問外存。5排序算法的性能評價n排序算法的時間復雜度:指算法執(zhí)行中的數據比較次數、數據移動次數與待排序數據序列的元素個數n之間
3、的關系。n排序算法的空間復雜度:指算法執(zhí)行中,除待排序數據序列本身所占用的內存空間外,需要的附加內存空間與待排序數據序列的元素個數n之間的關系。數據結構(Java版)葉核亞3.2 插入排序n插入排序(insertion sort)的基本思想是:每趟將一個待排序的數據元素,按其關鍵字大小,插入到已排序的數據序列中,使得插入后的數據序列仍是已排序的,直到全部元素插入完畢。n3.2.1 直接插入排序n3.2.2 希爾排序數據結構(Java版)葉核亞3.2.1 直接插入排序1直接插入排序算法2順序存儲結構線性表的直接插入排序518765432table(a) k=5,i=1,插入535(b) k=3,
4、在子序列5中查找,i=1,5向后移動,插入3253(c) k=2,在3,5中查找,i=1,3,5向后移動,插入227543(e) k=7,在2,3,4,5中查找,i=5,插入7(f) k=1,在2,3,4,5,7中查找,i=1,2,3,4,5,7向后移動,插入11754322543(d) k=4,在2,3,5中查找,i=3,5向后移動,插入4序號iiiiii1234521圖3.1 直接插入排序算法描述數據結構(Java版)葉核亞【例3.1】 順序表的直接插入排序的算法實現與測試。import ds_java.LinearList1; /順序存儲結構的線性表類public class Inser
5、tSort1 extends LinearList1 /直接插入排序 public InsertSort1(int table) /將table數組元素依次插入已排序順序表 super(table.length); for(int i=0;i=i;j-)數據結構(Java版)葉核亞3算法分析n直接插入排序的平均比較次數為 n平均移動次數為n直接插入排序的時間復雜度為O(n2)。n直接插入排序算法是穩(wěn)定的。ninnniC12241434121平均ninnniM1244) 1(2平均數據結構(Java版)葉核亞4鏈表的直接插入排序pprior data next 1headq2 3 (a) 空表插
6、入(c) 中間插入(b) 頭插入q 3 3 head 1qheadrearheadrear 1headq2 3 (d) 尾插入rearrear 4 圖3.2 雙向鏈表的插入排序算法描述數據結構(Java版)葉核亞【例3.2】 雙向鏈表的直接插入排序import ds_java.TwolinkNode; /雙向鏈表的結點類import ds_java.Twolink1; /雙向鏈表類public class Twolink2 extends Twolink1 /雙向鏈表插入排序 protected TwolinkNode rear; /引用鏈表最后一個結點 Twolink2() /建立空鏈表 s
7、uper(); /head=null rear=null; Twolink2(int n) /n個隨機值插入雙向鏈表 int i=0,k; System.out.print(insert: ); for(i=0;ithis.get(j+jump)時,表示該元素this.get(j)已在這趟排序后的位置,不需交換,則退出最內層循環(huán)。數據結構(Java版)葉核亞希爾排序算法 public void shellsort()/對順序表對象進行希爾排序/數據元素已存儲在table數組中 int i,j,jump,n=this.length(); jump=n/2; while(jump0) /控制增量
8、for(i=jump;i0) if(this.get(j)this.get(j+jump) /與相隔jump的元素比較、交換 swap(j,j+jump); /反序時,交換 j=j-jump;/繼續(xù)與前面的元素比較 數據結構(Java版)葉核亞3.3 交換排序n3.3.1 冒泡排序n3.3.2 快速排序數據結構(Java版)葉核亞3.3.1 冒泡排序1冒泡排序算法public void bubblesort() int i,j,n=this.length(); for(i=1;in;i+) /n-1趟排序 for(j=1;jthis.get(j+1) this.swap(j,j+1); /反序
9、時,交換 System.out.print(第+i+趟 ); this.output(); 2算法分析 時間復雜度為O(n2),空間復雜度為O(1) 。數據結構(Java版)葉核亞3改進的冒泡排序 public void bubblesort() int i=1,j,n=this.length(),index=1; boolean exchange=true; /是否交換的標記 while(in & exchange) /最多n-1趟排序 System.out.print(第+i+趟 index=+index+ n-i=+(n-i)+ ); exchange=false; /假定元素未交換 j
10、=index; /起始比較位置 while(j=n-i) /一輪比較、交換 System.out.print(this.get(j)+this.get(j+1) this.swap(j,j+1); /反序時,交換數據結構(Java版)葉核亞改進的冒泡排序算法描述1567843218765432table(a) 第1趟,i=1,從index到n-i+1的相鄰位置元素比較、交換交換index交換交換18567432(b) 第2趟,i=2,從index到n-i+1的相鄰位置元素比較、交換交換index交換n-i+1n-i+118756432(c) 第3趟,i=3,比較、交換交換indexn-i+11
11、8765432(d) 第3趟,i=4,比較,沒有交換,已排序indexn-i+1序號數據結構(Java版)葉核亞3.3.2 快速排序圖3.6 快速排序算法描述5713842618765432table(a) vot=5,tablejvot,不移動,j- i j17685423(i) i+,j-,分成兩個子序列(left,j)與(i,right)ijrightleft57138426(b) vot=5,tablejvot,將tablei值賦給tablej,j-ijrightleft17638426(d) vot=5,tablejvot,將tablej值賦給tablei,i+ij17638423(
12、e) vot=5,tableivot,i+ij17638423(f) vot=5,tableivot,將tablei值賦給tablej,j-17688423(h) i=j,將vot值賦給tableiij序號圖3.6 快速排序算法描述數據結構(Java版)葉核亞1快速排序算法 public void quicksort(int left,int right) /實現一趟快速排序 int i,j,n,vot; if(leftright) /左邊界小于右邊界,序列有效 i=left; j=right; vot=this.get(i); /第一個值作為基準值 while(i!=j) /進行一輪比較 w
13、hile(votthis.get(j) & ij) j-; /從右向左尋找較小值 if(ij) this.set(i,this.get(j); /較小值元素向左移動數據結構(Java版)葉核亞2算法分析n快速排序的平均比較次數為O(nlog2n),時間復雜度為O(nlog2n)。n由于快速排序是遞歸算法,系統(tǒng)調用時需要設立一個棧(stack)存放參數,最大遞歸調用層次數為。因此,算法的空間復雜度為O(nlog2n)。數據結構(Java版)葉核亞3.4 選擇排序1順序表的直接選擇排序算法 public void selectsort() int i,j,min,k,n = this.length
14、(); for(i=1;in;i+) /n-1趟排序 min=i; /記下本趟最小值位置 for(j=i+1;j=n;j+) /一輪比較、交換 if(get(j)get(min) min=j; /記下新的最小值位置 if(min!=i) swap(i,min); /本趟最小值交換到左邊 System.out.print(min=+min+ ); this.output(); 數據結構(Java版)葉核亞3單向鏈表的直接選擇排序 3 1head 4 minprior 2(b) 將min結點添加到已排序的單向鏈表之后 1 (a) 選擇值最小的結點(由min指向),將min結點刪除sortedhea
15、dmin 3head 4 minprior=null 2(d) 將min結點添加到已排序的單向鏈表之后 1 2 (c) 選擇值最小的結點(由min指向),將min結點刪除minheadsortedrearsortedrearsortedrearsortedrearminmin圖3.8 單向鏈表的直接選擇排序算法描述數據結構(Java版)葉核亞單向鏈表的直接選擇排序算法 public void selectsort() OnelinkNode sortedhead=null,sortedrear=null; OnelinkNode p=null,q=null,min=null,minprior=
16、null; do min=head; p=head.next; q=head; while(p!=null) if(p.datamin.data) /比較,min記住最小值位置 minprior=q; /minprior是min的前驅結點 min=p;數據結構(Java版)葉核亞3.5 歸并排序1歸并排序算法描述n所謂歸并,就是將兩個已排序的數據序列合并,形成一個已排序的數據序列,又稱兩路歸并。圖3.9 歸并排序算法描述數據結構(Java版)葉核亞順序存儲線性表的歸并排序算法描述數據結構(Java版)葉核亞2順序表的歸并排序算法實現 MergeSort1 temp; /輔助線性表 public
17、 void mergesort() /歸并排序算法 MergeSort1 x=this; int len=1; /已排序的序列長度,初始值為1 temp=new MergeSort1(x.length(); /temp所需空間與x一樣 do x.mergepass(temp,len); /將x中元素歸并到temp中 temp.output(); len=len*2; temp.mergepass(x,len); /將temp中元素歸并到x中 x.output(); len=len*2; while(lenq.data) /比較兩個鏈表第1個結點的值 q=h1.head;數據結構(Java版)葉核亞實習31實習目的:學習多種排序算法,靈活運行排序算法解
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鍍膜玻璃市場發(fā)展動態(tài)及投資規(guī)劃研究報告
- 2025-2030年中國鋰精礦行業(yè)競爭格局規(guī)劃分析報告
- 2025-2030年中國鉑金首飾市場運營狀況及發(fā)展前景分析報告
- 2025-2030年中國箱紙板行業(yè)運行動態(tài)與發(fā)展建議分析報告
- 2025貴州省建筑安全員C證考試題庫
- 2025-2030年中國硫氰酸鈉市場運營現狀及發(fā)展規(guī)劃分析報告
- 撫順職業(yè)技術學院《安裝工程計量與計價》2023-2024學年第二學期期末試卷
- 伊春職業(yè)學院《平面制圖設計》2023-2024學年第二學期期末試卷
- 隨州職業(yè)技術學院《科技文本翻譯》2023-2024學年第二學期期末試卷
- 建筑施工規(guī)范大全
- 幼兒園開學家長會PPT模板(含完整內容)
- 表冷器更換施工方案
- 瀝青集料篩分反算計算表格(自動計算)
- 哲學與人生(中職)PPT完整全套教學課件
- 惡性高熱課件
- 一年級語文下冊《我多想去看看》教案
- 真空滅弧室基本知識課件
- 工程EPC總承包項目安全生產管理辦法
- 川教版四年級(上、下冊)生命生態(tài)與安全教案及教學計劃附安全知識
- 05臨水臨電臨時設施安全監(jiān)理細則
評論
0/150
提交評論