浅析·排序

在生活中,经常会需要对一些东西排序,比如:体检时会将等人的视力分好坏排序;上课时,老师会根据作业提交的顺序与准确率进行排序;我们的洛谷账号也会由于咕值的多少来用名字颜色进行排序。因为有了排序所以就可以将毫无顺序的东西整理的有序,方便比较与统计。

接下来给大家讲几种排序

1.选择排序

选择排序就是要把一组数据中的第一个数据与最小数据交换,然后把交换的数据固定,再把除固定数据以外的第一个数据与剩下数据中的最小值进行比较,并进行交换,直到已排序的数据后面的数据是整组数据中最大的。这就是选择排序。
我们看到洛谷P1177这道题前往原题

P1177 【模板】排序

要我们把读入的N个数从小到大排序后输出。
输入输出样例:
输入 #1

5
4 2 4 5 1

输出 #2

1 2 4 4 5

用选择排序就直接去模拟把最小值交换的过程就行
废话不多说上代码:

for(int i = 0; i <= n - 1; i++) {   //嵌套循环
    for(int j = i + 1; j < n; j++)
	if(a[j] < a[i]) {
	    int m = a[i];
	    a[i] = a[j];
	    a[j] = m;
	}
}

时间和空间复杂度我也懒得写忘了。

冒泡排序

冒泡排序也不难,冒泡排序就是比较一组数据中相邻的两个元素,小的放前,大的放后,固定他俩的位置,在比较后两个,比到头之后再比较最后一个和最后一个-1的元素,小的放前,大的放后,直到比较出大小,最后输出即可,为什么要叫做“冒泡排序”呢,因为他是把这组数据中最大的想成泡泡,让他一直往后飘。

可用冒泡排序来解决1174这道题。

for(int i = 0; i < n - 1; i++) {   //嵌套循环
    for(int j = 0; j < n - i - 1; j++)
	if(a[j] < a[i]) {
	    int m = a[j];
	    a[i] = a[j + 1];
	    a[j + 1] = m;
	}
}

跟选择排序差不多。

插入排序

插入排序是把一组数据中第2个元素放到第一个元素前(就是插入过来)也相当于把第二个元素移到第2个元素那里,固定位置,后面的也一样,把所有位置交换后,再返回来把最后一个-1的元素,与这个元素-1的元素进行插入和移动,一个一个的比,最后输出就行。

接着上代码:

for(int i = 1; i < n; i++) {   //嵌套循环
    long long c = a[i],j //别问我为什么要定义,因为要把没有插得牌存着,等下还要放进去。
    for(int j = i - 1; j >= 0; j--) //这里得用j--
	if(a[j] > c) 
	   a[j + 1] = a[j];
    else break;//跳出
    a[j + 1] = c;
}

代码其实没很大区别。

排序就讲到这里了,下次再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值