排序-简单选择排序

简单选择排序
算法思想:
设待排序的记录存放在数组a[]中,数组长度为n。通过n-1趟排序,将a变成一个有序的数组。
(1)第一趟从a[0]开始,通过n-1次比较,从n-1个关键字中找出最小的记录,记做a[k],将a[0]和a[k]交换。
(2)第二趟从a[1]开始,通过n-2次比较,从n-2个关键字中找出最小的记录,记做a[k],将a[1]和a[k]交换。
(3)第i趟从a[i-1]开始,通过n-i+1次比较,从n-i个关键字中找出最小的记录,记做a[k],将a[i]和a[k]交换。
(4)经过n-1趟,排序完成

具体代码实现如下:

#include <iostream>
using namespace std;
//算法关键  每趟排序结果找最小关键字,然后每一趟把每一个关键字放到一个最终的位置上
void sort(int a[],int size){
    int k;
    int i;
    for( i=0;i<size-1;i++){
        k=i;
        for(int j=i+1;j<size;j++){
            if(a[j]<a[k])
                k=j;
        }
        //交换a[k]和a[i]
        if(k!=i){
            int temp=a[i];
            a[i]=a[k];
            a[k]=temp;
        }
        //输出每趟的排序结果
        cout<<"第"<<i+1<<"趟排序结果:";
        for(int i=0;i<size;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }

}

int main()
{
    int a[8]={40,36,64,90,49,19,25,66};
    sort(a,8);
    cout<<"简单选择排序后的结果:"<<endl;
    for(int i=0;i<8;i++)
        cout<<a[i]<<" ";
    return 0;
}

测试结果如下:
这里写图片描述

### 简单选择排序算法实现与解析 #### 一、简单选择排序简介 简单选择排序是一种直观的选择排序算法。其基本思想是在未排序部分找到最小(大)元素,将其放到已排序序列的末尾。 #### 二、具体操作过程描述 对于给定的数据元素序列,在第 i (i=1,2,...,n-1)时,从未排序的部分选出关键字最小的记录,顺序放在已排序序列的最后,直到全部排好为止[^1]。 #### 三、Python代码实例展示 下面是一个简单的 Python 版本的选择排序函数: ```python def selection_sort(arr): n = len(arr) for i in range(n): min_idx = i # 找到剩余列表中的最小元素索引 for j in range(i+1, n): if arr[min_idx] > arr[j]: min_idx = j # 将发现的最小元素与起始位置元素交换 arr[i], arr[min_idx] = arr[min_idx], arr[i] # 测试数组 arr_test = [64, 25, 12, 22, 11] selection_sort(arr_test) print ("Sorted array:", arr_test) ``` 此段代码定义了一个名为 `selection_sort` 的函数用于执行升序排列的任务。通过遍历整个输入列表,逐步构建有序子列表直至完成整体排序工作。 #### 四、性能分析 当处理接近逆向排序的数据集时,尽管每次迭代都需要完整的扫描才能定位下一个合适的候选者,但是由于内部仅涉及一次实际的位置互换动作,因此总体上仍保持较好的效率特性。最坏情况下的时间复杂度为O(n²),其中n代表待排序项的数量[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值