选择排序

从今天开始把之前学习过的数据结构和算法复习一下,写下博客当做一种总结。先从最简单的O(n^2)排序算法写起,先讲一下选择排序。
选择排序的思想就是遍历整个数组,假设我们是要从小到大对数组进行排序。那么每次遍历都找到数组中的当前最小元素,然后放置在它的正确位置上。举个例子,假如我们要对[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]这个数组进行排序,第一次遍历时,从十个元素中找到最小的元素1,然后将该元素与第一个位置的元素交换位置,即与10交换位置。经过这一次遍历之后,1就已经放置在正确的位置上了,那么第二次遍历时,只需要从第二个元素开始查找接下来9个元素中的最小值,然后放置在第二个位置上,接下来的步骤以此类推。
下面是代码的c++实现,使用了模板:

#include <iostream>

using namespace std;

//选择排序
//时间复杂度为O(n^2)
template<typename T>
void selectionSort( T arr[], int n ){
    for( int i = 0; i < n; i ++ ){
        int minIndex = i;//最小值的索引
        for( int j = i + 1; j < n; j ++ ){
            if( arr[j] < arr[minIndex] )
                minIndex = j;
        }
        swap( arr[minIndex], arr[i] ); 
    }
}
int main()
{
    int a[] = {10,9,8,7,6,5,4,3,2,1};
    selectionSort( a, 10 );
    for( int i = 0; i < 10; i ++ )
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值