排序演算法總結之直接選擇排序

飛翔的黃瓜發表於2017-08-02

       堆排序就是選擇排序的一種,不過我們這裡 寫的直接選擇排序就非常簡單了,它和直接插入排序很像都將資料分為有序區和無序區,所不同的是直接播放排序是將無序區的第一個元素直接插入到有序區以形成一個更大的有序區,而直接選擇排序是從無序區選一個最小的元素直接放到有序區的最後。(和冒泡也很像,只不過是一個個的換,而這個是找到最小的再換)

這裡參考的是這位大神的部落格http://blog.csdn.net/morewindows/article/details/6671824

設陣列為a[0…n-1]。

1.      初始時,陣列全為無序區為a[0..n-1]。令i=0

2.      在無序區a[i…n-1]中選取一個最小的元素,將其與a[i]交換。交換之後a[0…i]就形成了一個有序區。

3.      i++並重復第二步直到i==n-1。排序完成。

void SelectSort(int a[],int N)
{
int i,j,MinIndex;
for(i=0;i<N;i++)
{
    MinIndex=i;//找最小元素
    for(j=i+1;j<N;j++)
        if(a[j]<a[MinIndex])
        MinIndex=j;
    Swap(a[i],a[MinIndex]);
}
}
對於Swap()函式,最好的辦法是加一箇中間數,如
inline void Swap(int &a, int &b)  
{  
    int c = a;  
    a = b;  
    b = c;  
}  
不加的話如下,要加個判斷
inline void Swap1(int &a, int &b)  
{  
    if (a != b)  //這裡加個判斷,因為如果a==b時無判斷會讓這個數為0
    {  
        a ^= b;  
        b ^= a;  
        a ^= b;  
    }  
}  




相關文章