zoukankan      html  css  js  c++  java
  • 排序算法简单选择排序

    选择排序原理:循环查找n个元素中最小的元素,与第一个元素进行交换;继续查找n-1个元素中最小的元素,与第二个元素交换.....直至完成

    简单选择排序
     1 #include <iostream>
    2 using namespace std;
    3
    4
    5 //元素交换
    6 void swap(int &a,int &b)
    7 {
    8 int temp=a;
    9 a=b;
    10 b=temp;
    11 }
    12
    13 /*///////////////////////////////////////////////
    14 简单选择排序
    15 */
    16 void SelectSort(int *a,int len)
    17 {
    18 int i,j,pos,temp;
    19 for(i=0;i<len-1;i++)
    20 {
    21 pos=i;
    22 temp=a[i];
    23 for(j=i+1;j<len;j++)
    24 {
    25 if(a[j]<temp) //若a[i]小于后面的元素,则保存较小元素的下标,
    26 //并且将该元素的值保存在temp中,继续比较
    27 {
    28 pos=j;
    29 temp=a[j];
    30 }
    31 }
    32 swap(a[i],a[pos]);
    33 }
    34 for(i=0;i<len;i++)
    35 cout<<a[i]<<" ";
    36 cout<<endl;
    37 }
    38 /////////////////////////////////////////////////
    39
    40
    41
    42
    43 int main()
    44 {
    45 int n,i,a[20];
    46 cout<<"请输入数组元素n:"<<endl;
    47 cin>>n;
    48 cout<<"请输入"<<n<<"个元素:"<<endl;
    49 for(i=0;i<n;i++)
    50 cin>>a[i];
    51 SelectSort(a,n);
    52 return 0;
    53 }

    相比于冒泡排序算法,由于选择排序每次寻找最小元素使用的是数组下标作为标记,直到最后才进行交换移动的,所以减少了交换的次数。

    需要的比较次数是固定的:n-1+n-2+n-3+…+1=n(n-1)/2次。

    需要的交换次数:最好情况下为0次,最差情况下需要交换n-1次,总得时间复杂度为O(n^2)

  • 相关阅读:
    mkdir命令
    pwd命令
    chmod命令
    chown命令
    chgrp命令
    687. Longest Univalue Path
    HYSBZ 1036 树的统计Count (水题树链剖分)
    POJ 3709 K-Anonymous Sequence (斜率优化DP)
    LightOJ 1065 Island of Survival (概率DP?)
    LightOJ 1248 Dice (III) (水题,期望DP)
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2197914.html
Copyright © 2011-2022 走看看