資源描述:
《java排序算法的實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、1.冒泡排序?已知一組無序數(shù)據(jù)a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大于a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大于a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],以此類推,最后比較a[n-1]與a[n]的值。這樣處理一輪后,a[n]的值一定是這組數(shù)據(jù)中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共
2、處理n-1輪后a[1]、a[2]、……a[n]就以升序排列了。?優(yōu)點:穩(wěn)定,比較次數(shù)已知;?缺點:慢,每次只能移動相鄰兩個數(shù)據(jù),移動數(shù)據(jù)的次數(shù)多。?初始關(guān)鍵字[4938659776132749]?第一趟排序后[38496576132749]97?第二趟排序后[384965132749]7697?第三趟排序后[3849132749]657697?第四趟排序后[38132749]49657697?第五趟排序后[381327]4949657697?第六趟排序后[1327]384949657697?第七趟排序后[13]2738
3、4949657697?最后排序結(jié)果1327384949767697?2.選擇排序?①初始狀態(tài):無序區(qū)為R[1..n],有序區(qū)為空。②第1趟排序在無序區(qū)R[1..n]中選出關(guān)鍵字最小的記錄R[k],將它與無序區(qū)的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變?yōu)橛涗泜€數(shù)增加1個的新有序區(qū)和記錄個數(shù)減少1個的新無序區(qū)?!鄣趇趟排序第i趟排序開始時,當前有序區(qū)和無序區(qū)分別為R[1..i-1]和R[i..n](1≤i≤n-1)。該趟排序從當前無序區(qū)中選出關(guān)鍵字最小的記錄R[k],將它與無序區(qū)的第1個記錄R交換
4、,使R[1..i]和R[i+1..n]分別變?yōu)橛涗泜€數(shù)增加1個的新有序區(qū)和記錄個數(shù)減少1個的新無序區(qū).這樣,n個記錄的文件的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果。?優(yōu)點:穩(wěn)定,比較次數(shù)與冒泡排序一樣;?缺點:相對之下還是慢。?初始關(guān)鍵字[4938659776132749]第一趟排序后13[38659776492749]第二趟排序后1327[659776493849]第三趟排序后132738[9776496549]第四趟排序后13273849[49976576]第五趟排序后1327384949[977676
5、]第六趟排序后132738494976[7697]第七趟排序后13273849497676[97]最后排序結(jié)果1327384949767697?12232378986820122323782068980123456#include?usingnamespacestd;?voidmain()?{inti,j,k,t;intR[8]={49,38,65,97,76,13,27,49};for(i=0;i<7;i++){k=i;for(j=i+1;j<8;j++)if(R[j]6、!=i){t=R[j];R[j]=R[k];R[k]=t;}}?for(i=0;i<8;i++)cout<7、38659776132759]?a??b[1]b[2]?b[3]?b[4]b[5]?b[6]?b[7]b[8]?1—–49?49>?38??65??97???76?13???27??59?38??49??49??……….?38??38??49??……….?2—–38?38???49<65?97???76??13??27??59?3—–38?38???49?65<97???76??13??27??59?4—-38?38????49?65??97>??76??13??27??59?76??38??49??65??97??9
8、7……..?76??38??49??65??76??97……..?以此類推?voidinsertSort(Type*arr,longlen)?{longi=0,j=0;for(i=1;i0){