2、s[i];j=i-1;while(j>=0&&s[j]>temp){s[j+1]=s[j];j--;}s[j+1]=temp;}}常見(jiàn)排序算法的實(shí)現(xiàn)(二)→shell排序shell排序是對(duì)插入排序的一個(gè)改裝,它每次排序把序列的元素按照某個(gè)增量分成幾個(gè)子序列,對(duì)這幾個(gè)子序列進(jìn)行插入排序,然后不斷縮小增量擴(kuò)大每個(gè)子序列的元素?cái)?shù)量,直到增量為一的時(shí)候子序列就和原先的待排列序列一樣了,此時(shí)只需要做少量的比較和移動(dòng)就可以完成對(duì)序列的排序了。[詳細(xì)內(nèi)容]voidshell_sort(ints[],intn){//希爾intd
3、=0;inti,j,temp;for(d=n/2;d>=1;d/=2){for(i=d;i=0&&s[j]>temp){s[j+d]=s[j];j=j-d;}s[j+d]=temp;}}}常見(jiàn)排序算法的實(shí)現(xiàn)(四)→冒泡排序冒泡排序算法的思想:很簡(jiǎn)單,每次遍歷完序列都把最大(小)的元素放在最前面,然后再對(duì)剩下的序列從父前面的一個(gè)過(guò)程,每次遍歷完之后待排序序列就少一個(gè)元素,當(dāng)待排序序列減小為只有一個(gè)元素的時(shí)候排序就結(jié)束了。因此,復(fù)雜度在最壞的情況下是O(
4、N^2)。voidbubble_sort(ints[],intn){inti,j;inttemp;boolflag;for(i=n-1;i>=1;i--){flag=true;for(j=0;js[j+1]){temp=s[j];s[j]=s[j+1];s[j+1]=temp;flag=false;}}if(flag==true)break;}}常見(jiàn)排序算法的實(shí)現(xiàn)(五)→快速排序快速排序的算法思想:選定一個(gè)樞紐元素,對(duì)待排序序列進(jìn)行分割,分割之后的序列一個(gè)部分小于樞紐元素,一個(gè)部分
5、大于樞紐元素,再對(duì)這兩個(gè)分割好的子序列進(jìn)行上述的過(guò)程。?//對(duì)一個(gè)給定范圍的子序列選定一個(gè)樞紐元素,執(zhí)行完函數(shù)之后返回分割元素所在的位置,//在分割元素之前的元素都小于樞紐元素,在它后面的元素都大于這個(gè)元素intpartition(ints[],intlow,inthigh){inttemp;intpivo=s[low];while(low=pivo){high--;}-----à此處可以加if(low6、]=s[low];s[low]=temp;while(low7、的算法思想:把待排序序列分成相同大小的兩個(gè)部分,依次對(duì)這兩部分進(jìn)行歸并排序,完畢之后再按照順序進(jìn)行合并。voidmerge(ints[],intlow,intm,inthigh){inti,j,k=0;intt[100];for(i=low,j=m+1;i<=m&&j<=high;){if(s[i]<=s[j]){t[k++]=s[i++];}else{t[k++]=s[j++];}}while(i<=m)t[k++]=s[i++];while(j<=high)t[k++]=s[j++];for(i=low,j=
8、0;j