c++中的初級排序算法 選擇查找法、冒泡法

選擇排序法(降序)

  • 實例
int a[10]={6,3,42,23,35,71,98,67,56,38},i,j,t,n,max;
for(i=0;i<=8;i++)
{
    max=i; 
    for(j=i+1;j<=9;j++)  
    {
        if(a[max]<a[j])
        {
            n=j;
            j=max;
            max=n;
        }
    }
    if(max!=i)
    {
        t=a[max];
        a[max]=a[i];
        a[i]=t;
    }
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
>>>98 71 67 56 42 38 35 23 6 3 
  • 思路介紹
    1.第一個循環(huán)讓一個變量讓它代表最大元素的索引,同時將此循環(huán)中的第一個元素的索引賦值給它。
    2.在第二個循環(huán)中通過與別的元素進(jìn)行對比看看有沒有別的元素值比它還大,如果有讓它們的索引值進(jìn)行交換,一直對比到最后一個元素。
    3.在第二循環(huán)結(jié)束后看看最大元素的索引顯示真的是第一個元素嗎?如果不是,讓第一個元素與最大元素的索引值交換。

  • 細(xì)節(jié)問題
    兩次for循環(huán)中,變量的范圍不僅各有不同,而且還需要額外一個變量記錄,需要注意。

    第一個循環(huán)中變量i的范圍:它負(fù)責(zé)成為需要被進(jìn)行對比的第一個元素。
    (只用比較到總元素數(shù)-1,因為前面的數(shù)值大都已經(jīng)挑選出來,最后一個數(shù)必定是最小的,不需要進(jìn)行比較,索引<=8)

    第二個循環(huán)中變量j的范圍:它負(fù)責(zé)成為數(shù)組中除第一個數(shù)外所有需要對比的其他數(shù)。
    (因為i為第一個數(shù),起始的范圍就直接為i+1即可,結(jié)束到最后一個數(shù),索引<=9)

    我個人覺得這個交換法的理解難點就在于它是用最大元素的索引,而不是直接使用元素。而這么做的原因是在于如果直接使用元素,在第二個循環(huán)中,因為后面的元素值大概率會比第一個元素值大,而交換的過程中因為第一個元素其實并不是a[0]而是變量max。這樣就會讓數(shù)組中出現(xiàn)兩個“第一個元素”,這樣無疑就導(dǎo)致了程序的失敗。

冒泡法(降序)

  • 實例
int a[10]={6,3,42,23,35,71,98,67,56,38},i,t,j;
for(i=0;i<=8;i++)
{  
    for(j=0;j<=8-i;j++)
    {
        if(a[j]<a[j+1])
        {
            t=a[j+1];
            a[j+1]=a[j];
            a[j]=t;
       }
    }
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
>>>98 71 67 56 42 38 35 23 6 3 
  • 思路介紹
    1.首先對比第一個和第二個元素值,若第一個元素比第二個元素值小,交換兩個的位置;再繼續(xù)比較第二個元素和第三個元素值,這個過程中保持最小的元素值始終放在后。
    2.直到倒數(shù)第二個元素和倒數(shù)第一個數(shù)對比完成,此時最小的數(shù)就被選擇交換出來,處于最后的位置,一輪冒泡結(jié)束。
    3.因為最小的數(shù)已經(jīng)被安置在最后,下一輪的冒泡只用在第一個元素和倒數(shù)第二個數(shù)之間進(jìn)行。
    4.重復(fù)1~2的過程,直到循環(huán)結(jié)束。

  • 細(xì)節(jié)問題
    兩次for循環(huán)中,變量的范圍各有不同,這里解釋一下。

    第一個循環(huán)中變量i的范圍:負(fù)責(zé)控制一共要交換幾次?
    (最后一個數(shù)不需要比較:對比9次,索引<=8)

    第二個循環(huán)中變量j的范圍:負(fù)責(zé)控制一次中的具體操作。
    (在下一個循環(huán)中,具體要交換幾次,進(jìn)行幾次冒泡的過程:對比9-i次,索引<=8-i)
    深刻理解第二次循環(huán)的具體作用:我們不是要找到它,而是要轉(zhuǎn)換它,讓最小的數(shù)安置于最后方,這點很重要。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容