选择排序

1.基本思想:每一趟从待排序的数据元素选出最小或最大的一个元素,数按序排放在待排序的元素的最前端,直到全部待排序的元素排完

2.基本代码

px(int r[])
{
    ;i<n;i++)
       {
           int k=i;
           ;j<=n;j++)
              {
                 if(a[k]>a[j]
                     K=J;
                }
            if(k!=i)
              {
                    int tmp=a[i];
                    a[i]=a[k];
                    a[k]=a[i];
                }
           }
}

3.例题

谁考了第k名

总时间限制: 
1000ms

内存限制: 
65536kB
描述

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。

输入
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。
其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
];
];
int main()
{
    scanf("%d%d",&n,&k);
    ;i<=n;i++)
     {
         cin>>a[i];
         cin>>b[i];
     }
     ;i<n;i++)
     {
         ;j<=n;j++)
         {
             if(b[i]<b[j])
             {
                 float tmp=b[i];
                 b[i]=b[j];
                 b[j]=tmp;
                 int amp=a[i];
                 a[i]=a[j];
                 a[j]=amp;
             }
         }
     }
     ;i<=n;i++)
     {
         if(i==k)
         {
          cout<<a[i]<<" ";
         printf("%.6g",b[i]);
         }
     }
     ;
}

冒泡排序

1.基本思想:依次比较相邻的两个数,把大的放前面小的放后面。即先比较第一个和第二个,在比较第二个和第三个。。。。。。直到比较完最后两个数,则最小的数一定在最后面

2.核心代码

    ;i<n;i++)
       ;j<=n-i;j++)
            {
                int tmp=a[j];
                a[j]=a[j+];
                a[j+]=tmp;
         } 

3.例题

02:奇数单增序列

总时间限制: 
1000ms

内存限制: 
65536kB
描述

给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。

输入
共2行:
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。
输出
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
样例输入
10
1 3 2 6 5 4 9 8 7 10
样例输出
1,3,5,7,9
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,l;
],b[];
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
       {
           scanf("%d",&a[i]);
           !=)
           {
               l++;
               b[l]=a[i];
            }
       }
    ;i<l;i++)
       ;j<=l-i;j++)
            ])
            {
                int tmp=b[j];
                b[j]=b[j+];
                b[j+]=tmp;
            }
    ;i<l;i++)
       printf("%d,",b[i]);
    printf("%d",b[l]);
    ;
 } 

结构体排序

有同学会说,不就是给结构体排序吗,这个简单,那在这就不都说了

例题

03:成绩排序

总时间限制: 
1000ms

内存限制: 
65536kB
描述

给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

输入
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
样例输入
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28
样例输出
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct student
{
    int score;
    string name;
}a[];
int score_comp(const student &a,const student &b)
{
    ;
    ;
    ;
    ;
}
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
    {
        cin>>a[i].name;
        cin>>a[i].score;
    }
    sort(a+,a+n+,score_comp);
    ;i<=n;i++)
     {
         cout<<a[i].name<<' ';
         cout<<a[i].score<<endl;
     }
     ;
}

桶排序

1.基本思想

若带排序的记录的关键词在一个明显的有限范围内(整形)时,可以设计有限个有序桶,每个桶装入一个值(当然可以装入若干个值)

顺序输出各桶的值,将得到一个有序数列。

2.模板

例题:输入n个0到100之间的整数,从小到大排序

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
];
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
       {
           scanf("%d",&k);
           b[k]++;
       }
    ;i<=;i++)
      )
       {
           printf("%d ",i);
           b[i]--;
       }
    ;
 } 

3.例题

1076 排序

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 白银 Silver
 
 
 
题目描述 Description

给出n和n个整数,希望你从小到大给他们排序

输入描述 Input Description

第一行一个正整数n

第二行n个用空格隔开的整数

输出描述 Output Description

输出仅一行,从小到大输出n个用空格隔开的整数

样例输入 Sample Input

3

3 1 2

样例输出 Sample Output

1 2 3

数据范围及提示 Data Size & Hint

1<=n<=100000

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
];
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
       {
           scanf("%d",&k);
           b[k]++;
       }
    ;i<=;i++)
      )
       {
           printf("%d ",i);
           b[i]--;
       }
    ;
 } 

数据排序 第一讲( 各种排序方法 结合noi题库1.10)的更多相关文章

  1. 数据排序 第二讲( 各种排序方法 结合noi题库1.10)

    先来个题练练手吧! 例题 04:奖学金 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生 ...

  2. 数据排序 第三讲( 各种排序方法 结合noi题库1.10)

    说了那么多种排序方法了,下面就来先做几个题吧 06:整数奇偶排序 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给定10个整数的序列,要求对其重新排序.排序 ...

  3. PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

  4. MySQL使用 IN 查询取出数据排序问题(与in排序相同、不排序)

    MySQL使用 IN 查询取出数据排序问题(与in排序相同) 今天在项目中遇到一个问题,就是做一个最近浏览的功能,但是功能做出来了,取出数据时候要用到类似这么一条带in查询的sql语句, select ...

  5. 1T数据快速排序!十种经典排序算法总结

    1 冒泡排序 每次循环都比较前后两个元素的大小,如果前者大于后者,则将两者进行交换.这样做会将每次循环中最大的元素替换到末尾,逐渐形成有序集合.将每次循环中的最大元素逐渐由队首转移到队尾的过程形似&q ...

  6. mysql 查询数据时按照A-Z顺序排序返回结果集

    mysql 查询数据时按照A-Z顺序排序返回结果集 $sql = "SELECT * , ELT( INTERVAL( CONV( HEX( left( name, 1 ) ) , 16, ...

  7. MapReduce:将下面的两排数字先按第一排排序,然后再按第二排排序,要求顺序排序

    MapReduce:将下面的两排数字先按第一排排序,然后再按第二排排序,要求顺序排序 文件如下: 这个案例主要考察我们对排序的理解,我们可以这样做: 代码如下(由于水平有限,不保证完全正确,如果发现错 ...

  8. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  9. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...

随机推荐

  1. bzoj3343: 教主的魔法 分块 标记

    修改:两边暴力重构,中间打标记.复杂度:O(n0.5) 查询:中间二分两边暴力.O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是n级别的 标记不用下传因为标记不 ...

  2. Small things are better

    Yesterday I had fun time repairing 1.5Tb ext3 partition, containing many millions of files. Of cours ...

  3. (转)详解HTML网页源码的charset格式

    关于HTML网页源码的字符编码(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解释 crifan http://www.crifan.com/summary_expl ...

  4. MyEclipse快捷键大全(转)1

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+ ...

  5. windows下mysql 5.7的配置全过程

    这是一套在好多次的安装下总结出来的经验,包括很多种遇到的问题,查过很多资料,特此总结一下. 一.从官网下载MySQL的zip(免安装的) 解压mysql-5.7.11-winx64.zip到自己指定的 ...

  6. COGS727 [网络流24题] 太空飞行计划

    [问题描述] W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪 ...

  7. Linux ssh的使用

    1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...

  8. python3 time、random、hashlib模块

    一.时间模块时间的几种形式:时间戳,结构化时间,字符串时间 import time print(time.time()) # 仅仅是当前时间的时间戳 float print(time.localtim ...

  9. Google Breakpad: 实战crash .

    Google Breakpad: 实战crash . http://blog.csdn.net/zm_21/article/details/24795205 C/C++程序最棘手的时候就是一个字“挂” ...

  10. 转 appium解决每次运行都需要安装Unlock以及AppiumSetting的问题

    一.需要解决的问题 在部分android机型上每次运行最新版的appium-desktop都需要安装AppiumSetting以及Unlock,并且安装过程需要用户手动来确认,即使测试机上已经安装了这 ...