选择排序讲解

        选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

伪代码:

for(int i=0;i<n;i++)
{
    int temp = i;
    for(int j = index;j<n;j++)
    {
        if(a[temp]>a[j])
        {
            temp = j;
        }
    }
    swap(a[temp],a[i]);
    index++;
}

写一个程序,将1~10从大到小排序:

#include<iostream>
using namespace std;

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

void paixu(int *arr,int n) {  
    int *min; 
    for (int *i=arr;i<arr+n-1;i++)
	{  
        min = i;  
        for(int *j=i+1;j<arr+n;j++)
		{  
            if(*j>*min)
			{ 
                min=j;  
            }  
        }  
        if(min!=i)
		{  
            swap(i,min);  
        }  
    }  
}  
  
  
void print(int *arr,int n)
{
    for (int *i=arr;i<arr+n;i++)
	{  
        cout<<*i<<" ";  
    }  
    cout<<endl;  
}  
  
 
int main() {  

    int arr[10];  
    int n=10; 
  
      
    for (int *i=arr;i<arr+n;i++)
	{  
        cin>>*i;  
    }  
    cout << endl;  
  
    
    paixu(arr, n);  
  
 
    print(arr, n);  
  
    return 0;  
}

选择排序的核心思想即是在一个范围里(为排序的)找出最小或者最大的值,与范围的起始值进行交换,进行n-1次,从而排序完整个集合。

​ 选择排序的时间复杂度:由于需要排序n-1次,每一趟又需要遍历m个元素,所以选择排序的时间复杂度即为O(n2)。

​ 比赛时,只能适合10000以内的数据,如果超出了这个数据,很可能会超时。

​ 这里有一个技巧,就是在比赛的时候,可以避免使用cin、cout,而使用c语言中的printf、scanf,后者是比前者快很多的,当然前者也可以通过其他代码进行优化,但如果记不住,可以直接用C语言的输入输出,以提高通告的概率。

什么叫算法的稳定性:算法稳定性指的是在一组待排序记录中,如果存在任意两个相等的记录R和S,且在待排序记录中R在S前,如果在排序后R依然在S前,即它们的前后位置在排序前后不发生改变,则称为排序算法为稳定的。

​ 为什么选择排序是不稳定的?举个特例{10,8,10,4},这四个值第一个10我们标记为A10,第二个10我们标记为B20,在第一次排序过程后序列变为{4,8,10,10},A10去了B10后面,和原来的相对位置不一样了,所以选择排序是不稳定的。

最后,大家可以看看这篇文章:

【C++】选择排序_c++选择排序-CSDN博客

我是IDiostream,希望下次与你相遇!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值