資源描述:
《c語言經(jīng)典排序算法(8種-含源代碼)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、c語言經(jīng)典排序算法(8種-含源代碼).txt蜜蜂整日忙碌,受到贊揚(yáng);蚊子不停奔波,人見人打。多么忙不重要,為什么忙才重要。天行健,君子以自強(qiáng)不息常見經(jīng)典排序算法1.希爾排序2.二分插入法3.直接插入法4.帶哨兵的直接排序法5.冒泡排序6.選擇排序7.快速排序8.堆排序一.希爾(Shell)排序法(又稱宿小增量排序,是1959年由D.L.Shell提出來的)/*Shell排序法*/#includevoidsort(intv[],intn){intgap,i,j,temp;for(gap=n/2;gap>0;gap/=2)/*設(shè)置排序的步
2、長,步長gap每次減半,直到減到1*/{for(i=gap;i=0)&&(v[j]>v[j+gap]);j-=gap)/*比較相距gap遠(yuǎn)的兩個(gè)元素的大小,根據(jù)排序方向決定如何調(diào)換*/{temp=v[j];v[j]=v[j+gap];v[j+gap]=temp;}}}}二.二分插入法/*二分插入法*/voidHalfInsertSort(inta[],intlen){inti,j,temp;intlow,high,mid;for(i=1;i3、保存但前元素*/low=0;high=i-1;while(low<=high)/*在a[low...high]中折半查找有序插入的位置*/{mid=(low+high)/2;/*找到中間元素*/if(a[mid]>temp)/*如果中間元素比但前元素大,當(dāng)前元素要插入到中間元素的左側(cè)*/{high=mid-1;}else/*如果中間元素比當(dāng)前元素小,但前元素要插入到中間元素的右側(cè)*/{low=mid+1;}}/*找到當(dāng)前元素的位置,在low和high之間*/for(j=i-1;j>high;j--)/*元素后移*/{a[j+1]=a[j];}a[hig
4、h+1]=temp;/*插入*/}}三.直接插入法/*直接插入法*/voidInsertionSort(intinput[],intlen){inti,j,temp;for(i=1;i-1&&input[j]>temp;j--)/*從當(dāng)前元素的上一個(gè)元素開始查找合適的位置*/{input[j+1]=input[j];/*一邊找一邊移動(dòng)元素*/input[j]=temp;}}}四.帶哨兵的直接排序法/***帶哨兵的直接插入排序,數(shù)組的第一個(gè)元素
5、不用于存儲(chǔ)有效數(shù)據(jù)*將input[0]作為哨兵,可以避免判定input[j]中,數(shù)組是否越界*因?yàn)樵趈--的過程中,當(dāng)j減小到0時(shí),變成了input[0]與input[0]*自身進(jìn)行比較,很明顯這個(gè)時(shí)候說明位置i之前的數(shù)字都比input[i]小*位置i上的數(shù)字不需要移動(dòng),直接進(jìn)入下一輪的插入比較。**/voidInsertionSortWithPiquet(intinput[],intlen){inti,j;for(i=2;i6、ut[i];for(j=i-1;input[j]>input[0];j--){input[j+1]=input[j];input[j]=input[0];/*input[j]一直都是排序的元素中最大的那一個(gè)*/}}}五.冒泡法/*冒泡排序法*/voidBublesort(inta[],intn){inti,j,k;for(j=0;ja[i+1])/*把值比較大的元素沉到底*/{k=a[i]
7、;a[i]=a[i+1];a[i+1]=k;}}}}六.選擇排序法/*算法原理:首先以一個(gè)元素為基準(zhǔn),從一個(gè)方向開始掃描,*比如從左至右掃描,以A[0]為基準(zhǔn)。接下來從A[0]...A[9]*中找出最小的元素,將其與A[0]交換。然后將基準(zhǔn)位置右*移一位,重復(fù)上面的動(dòng)作,比如,以A[1]為基準(zhǔn),找出*A[1]~A[9]中最小的,將其與A[1]交換。一直進(jìn)行到基準(zhǔn)位*置移到數(shù)組最后一個(gè)元素時(shí)排序結(jié)束(此時(shí)基準(zhǔn)左邊所有元素*均遞增有序,而基準(zhǔn)為最后一個(gè)元素,故完成排序)。*/voidSelectsort(intA[],intn){inti,j,min,te
8、mp;for(i=0;i