天天看點

簡單選擇排序

選擇排序時間複雜度也為O(n^2)

算法思想:

選擇排序即每次length-i的長度内選擇一個最小的元素,與第一個進行替換,這樣大循環length次後,就可以得到排好序的數組了。

主要代碼:

void selectSort(int *arr,int length){
    int i,j,k,min;
    for(i=0;i<length;i++){
        min = i;
        for(j=i+1;j<length;j++){
            if(arr[j] <arr[min])
                min = j;
        }
        if(min != i){
            k = arr[i];
            arr[i] = arr[min];
            arr[min] = k;
        }
    }
}      

全部代碼:

簡單選擇排序
簡單選擇排序
#include <stdio.h>
#include <stdlib.h>
int arrtest[10] = {3,4,7,8,0,9,1,2,6,5};
//int arrtest[10] = {0,1,2,3,4,5,6,7,8,9};
//int arrtest[10] = {9,8,7,6,5,4,3,2,1,0};
void copy(int *arr,int length);
void print(int *arr,int length);
void selectSort(int *arr,int length);
int main(){
    int Arr[10];
    copy(Arr,10);
    print(Arr,10);
    selectSort(Arr,10);
    print(Arr,10);
    getchar();
    return 0;
}
void selectSort(int *arr,int length){
    int i,j,k,min;
    for(i=0;i<length;i++){
        min = i;
        for(j=i+1;j<length;j++){
            if(arr[j] <arr[min])
                min = j;
        }
        if(min != i){
            k = arr[i];
            arr[i] = arr[min];
            arr[min] = k;
        }
    }
}
void copy(int *arr,int length){
    int i;
    for(i=0;i<length;i++){
        arr[i] = arrtest[i];
    }
}

void print(int *arr,int length){
    int i;
    for(i=0;i<length;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
}      

View Code

運作示例:

簡單選擇排序