說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實(shí)時(shí)把握輿情動(dòng)態(tài)精準(zhǔn)追溯信息源頭
在運(yùn)用java過程當(dāng)中,有時(shí)需要對數(shù)組進(jìn)行排序,而排序的方式主要有四種,分別是冒泡法,選擇排序法,快速排序法以及插入排序法,那這四種排序法具有哪些特點(diǎn)呢?又該如何實(shí)現(xiàn)呢?接下來我們就一起來好好的了解一下吧。
數(shù)組排序——數(shù)組排序方法的優(yōu)缺點(diǎn)分析
一、冒泡排序
已知一組無序數(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]以相同方法處理一輪,以此類推。共處理n-1輪后a[1]、a[2]、……a[n]就以升序排列了。
優(yōu)點(diǎn):穩(wěn)定;
缺點(diǎn):慢,每次只能移動(dòng)相鄰兩個(gè)數(shù)據(jù)。
二、選擇排序
冒泡排序的改進(jìn)版。
每一趟從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。
選擇排序是不穩(wěn)定的排序方法。
n個(gè)記錄的文件的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果:
①初始狀態(tài):無序區(qū)為R[1..n],有序區(qū)為空。
②第1趟排序
在無序區(qū)R[1..n]中選出關(guān)鍵字最小的記錄R[k],將它與無序區(qū)的第1個(gè)記錄R[1]交換,使R[1..1]和R[2..n]分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無序區(qū)。
……
③第i趟排序
第i趟排序開始時(shí),當(dāng)前有序區(qū)和無序區(qū)分別為R[1..i-1]和R(1≤i≤n-1)。該趟排序從當(dāng)前無序區(qū)中選出關(guān)鍵字最小的記錄R[k],將它與無序區(qū)的第1個(gè)記錄R交換,使R[1..i]和R分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無序區(qū)。
這樣,n個(gè)記錄的文件的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果。
優(yōu)點(diǎn):移動(dòng)數(shù)據(jù)的次數(shù)已知(n-1次);
缺點(diǎn):比較次數(shù)多。
三、插入排序
已知一組升序排列數(shù)據(jù)a[1]、a[2]、……a[n],一組無序數(shù)據(jù)b[1]、b[2]、……b[m],需將二者合并成一個(gè)升序數(shù)列。首先比較b[1]與a[1]的值,若b[1]大于a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大于a[2],則繼續(xù)跳過,直到b[1]小于a數(shù)組中某一數(shù)據(jù)a[x],則將a[x]~a[n]分別向后移動(dòng)一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若無數(shù)組a,可將b[1]當(dāng)作n=1的數(shù)組a)
優(yōu)點(diǎn):穩(wěn)定,快;
缺點(diǎn):比較次數(shù)不一定,比較次數(shù)越少,插入點(diǎn)后的數(shù)據(jù)移動(dòng)越多,特別是當(dāng)數(shù)據(jù)總量龐大的時(shí)候,但用鏈表可以解決這個(gè)問題。
四、快速排序
快速排序是目前已知的最快的排序方法。
已知一組無序數(shù)據(jù)a[1]、a[2]、……a[n],需將其按升序排列。首先任取數(shù)據(jù)a[x]作為基準(zhǔn)。比較a[x]與其它數(shù)據(jù)并排序,使a[x]排在數(shù)據(jù)的第k位,并且使a[1]~a[k-1]中的每一個(gè)數(shù)據(jù)a[x],然后采用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n]兩組數(shù)據(jù)進(jìn)行快速排序。
優(yōu)點(diǎn):極快,數(shù)據(jù)移動(dòng)少;
缺點(diǎn):不穩(wěn)定。
數(shù)組排序方法案例
1.利用Arrays帶有的排序方法快速排序
importjava.util.Arrays;2publicclassTest2{
publicstaticvoidmain(String[]args){
int[]a={5,4,2,4,9,1};
Arrays.sort(a);//進(jìn)行排序
for(inti:a){
System.out.print(i);
}
}
}
2.冒泡排序算法
publicstaticint[]bubbleSort(int[]args){//冒泡排序算法
for(inti=0;i
for(intj=i+1;j
if(args[i]>args[j]){
inttemp=args[i];
args[i]=args[j];
args[j]=temp;
}
}
}
returnargs;
}
3.選擇排序算法
publicstaticint[]selectSort(int[]args){//選擇排序算法
for(inti=0;i
intmin=i;
for(intj=i+1;j
if(args[min]>args[j]){
min=j;
}
}
if(min!=i){
inttemp=args[i];
args[i]=args[min];
args[min]=temp;
}
}
returnargs;
}
4.插入排序算法
publicstaticint[]insertSort(int[]args){//插入排序算法
for(inti=1;i
for(intj=i;j>0;j–){
if(args[j]
inttemp=args[j-1];
args[j-1]=args[j];
args[j]=temp;
}elsebreak;
}
}
returnargs;
}
以上就是有關(guān)數(shù)組排序如何操作以及有哪些優(yōu)缺點(diǎn)的所有內(nèi)容,這四種方法因?yàn)楦饔懈髯缘膬?yōu)勢和缺點(diǎn),因此在使用的過程當(dāng)中,大家就一定要做好選擇。如果大家還想了解更多與之有關(guān)的內(nèi)容,歡迎關(guān)注我們文軍營銷的官網(wǎng)。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732