算法解析之选择排序

2017-03-29  本文已影响14人  dongwenbo
选择排序

算法思路:
1、整个序列分为待排序部分和已排序部分
2、遍历待排序部分找到最小值,与待排序部分的第一个值交换
3、重复2直到整个序列有序

C++:

//交换值
void swap(int *a,int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}
//选择排序
void selectionSort(int arr[],int n){
//重复2步骤,重复n-1,交换n-1次
    for (int i = 0; i < n-1; i++) {
        //需要先用一个变量记录最小值索引,初始值为重复次数i(未排序部分的第一个值)
        int minIndex = i;
        //2步骤,从待排序部分找出最小值的序列
        for (int j = i; j < n; j++) {
            if (arr[j]<arr[minIndex]) {
                minIndex = j;
            }
        }
        //交换
        swap(&arr[i], &arr[minIndex]);
    }
    //整个序列有序
}

加入模板函数(泛型)更加C++:

template <typename T>
void swap(T *a,T *b){
    T temp = *a;
    *a = *b;
    *b = temp;
}

template <typename T>
void selectionSort(T arr[],int n){
    for (int i = 0; i < n; i++) {
        int minIndex = i;
        for (int j = i; j < n; j++) {
            if (arr[j]<arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(&arr[i], &arr[minIndex]);
    }
}

如果要排序自定义类型,必须重载比较操作符<>

上一篇下一篇

猜你喜欢

热点阅读