zoukankan      html  css  js  c++  java
  • C语言 · 选择排序

    算法提高 选择排序  
    时间限制:1.0s   内存限制:256.0MB
        
      
      选择排序
    问题描述
      排序,顾名思义,是将若干个元素按其大小关系排出一个顺序。形式化描述如下:有n个元素a[1],a[2],…,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]<a[i[2]]<…<a[i[n]]
      i[k]为这个新顺序。
      选择排序的思想极其简单,每一步都把一个最小元素放到前面,如果有多个相等的最小元素,选择排位较考前的放到当前头部。还是那个例子:{3 1 5 4 2}:
      第一步将1放到开头(第一个位置),也就是交换3和1,即swap(a[0],a[1])得到{1 3 5 4 2}
      第二步将2放到第二个位置,也就是交换3和2,即swap(a[1],a[4])得到{1 2 5 4 3}
      第三步将3放到第三个位置,也就是交换5和3,即swap(a[2],a[4])得到{1 2 3 4 5}
      第四步将4放到第四个位置,也就是交换4和4,即swap(a[3],a[3])得到{1 2 3 4 5}
      第五步将5放到第五个位置,也就是交换5和5,即swap(a[4],a[4])得到{1 2 3 4 5}
      输入n个整数,输出选择排序的全过程。
      要求使用递归实现。
    输入格式
      第一行一个正整数n,表示元素个数
      第二行为n个整数,以空格隔开
    输出格式
      共n行,每行输出第n步选择时交换哪两个位置的下标,以及交换得到的序列,格式:
      swap(a[i],a[j]):a[0] … a[n-1]
      i和j为所交换元素的下标,下标从0开始,最初元素顺序按输入顺序。另外请保证i<=j
      a[0]…a[n-1]为交换后的序列,元素间以一个空格隔开
    样例输入
    5
    4 3 1 1 2
    样例输出
    swap(a[0], a[2]):1 3 4 1 2
    swap(a[1], a[3]):1 1 4 3 2
    swap(a[2], a[4]):1 1 2 3 4
    swap(a[3], a[3]):1 1 2 3 4
    swap(a[4], a[4]):1 1 2 3 4
    数据规模和约定
      n<=100
      整数元素在int范围内
     
     1 #include<stdio.h>
     2 int n;
     3 int a[200];
     4 void dfs(int begin){
     5     if(begin+1>n){//出口 
     6         return;
     7     }else{
     8         int min=begin;//定义一个最小值存放最小值的小标
     9         for(int i=begin+1;i<n;i++){//前面排好了,在后面没排的中找 
    10             if(a[min]>a[i])//决定升序降序 
    11                 min = i;//将更小值的小标赋给min
    12         }
    13         printf("swap(a[%d], a[%d]):",begin,min);//按题意:min<begin
    14         int t = a[min];//交换值呗 
    15         a[min] = a[begin];
    16         a[begin] = t;
    17         for(int i=0;i<n;i++){//输出呗 
    18             printf("%d ",a[i]);
    19         }
    20         printf("
    ");
    21         dfs(begin+1);//找下一个呗 
    22     }
    23 }
    24 int main(){
    25     scanf("%d",&n);
    26     getchar();//处理回车 
    27     for(int i=0; i<n; i++){
    28         scanf("%d",&a[i]);
    29     }
    30     dfs(0);//从第0个位置开始 
    31     return 0;
    32 }
  • 相关阅读:
    第二十一天作业
    第二十天:继承
    第二十天作业
    第十六天
    第十九天作业
    day53
    day52
    day51
    day50
    day44
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6663535.html
Copyright © 2011-2022 走看看