2013年6月25日 星期二

Selection sort (選擇排序法)

(一)key idea: 自 i+1 筆 到第 n 筆資料 挑出最小值然後和第i交換

(二)The example:{88,7,87,9,80,100,800,10,5}

(三)每回合變化

 


優點:

適合用在大型記錄之sorting,因為每回和頂多Swap 1次


程式碼

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main (void)
{
    int k;
    int a[] = {88,7,87,9,80,100,800,10,5}; //You change the data what you want to sort
    int array_size = sizeof(a)/sizeof(int);


    printf("start selection sort\n");
    SelectionSort(a,array_size);


    printf("Ans is:");
    for(k = 0; k<array_size;k++) //print the result
        printf("%d ",a[k]);


}

void SelectionSort(int data[],int array_size)
{
    int i,j,minmum,q;
    int counta = 0;
    bool f;

    for(i=0; i< (array_size-1); i++) //execute the n-1 times
    {
        minmum = i;

        for(j=i+1;j<array_size;j++) //找出目前最小值在哪裡        {
            if(data[j]<data[minmum])
                minmum = j;
        }

        if(minmum != i )//如果和之前位置一樣就不用交換
            Swap(&data[i],&data[minmum]);

    /* // print the every pass
        printf("pass%d ",i);
        for(q=0;q<array_size;q++)
            printf("%d ",data[q]);
        printf("\n");*/


    }

}

void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}


沒有留言:

張貼留言