Day 4_3 算法初步--排序(简单应用)

1.冒泡排序

主要就是交换位置,从数组第一个数开始比较,先确定最大的数,放到数组最后,在确定第二大的数,以此类推,是从后往前排。前面文章有代码实例

2.选择排序

枚举,从序列中找到最小的数,与第一个元素交换,剩下n-1个就是待排序序列,继续从这n-1个中找到最小的,与第二个元素交换,剩下n-2个就是待排序序列,以此类推。

#include<cstdio>
#include<cstring>
void selectSort(int A[],int n){
	for(int i = 0;i<n;i++){
		int k = i;
		for(int j = i;j<n;j++){
			if(A[j] < A[k])
				k = j; 
		}
		int temp = A[i];
		A[i] = A[k];
		A[k] = temp;
	}
}
int main(){
	int a[] = {1,5,4,8,9,3,2,10,7,6};
	int len = sizeof(a)/sizeof(int);
	selectSort(a,len);
	for(int i = 0;i<len;i++)
		printf("%d ",a[i]); 
	return 0;
} 

3.插入排序

#include<cstdio>
#include<cstring> 
void selectSort(int A[],int n){
	for(int i = 1;i<n;i++){
		int temp = A[i],j = i;
		while(j>1 && temp<A[j-1]){
			A[j] = A[j-1];
			j--;
		}
		A[j] = temp;
	}
}
int main(){
	int a[] = {1,5,4,8,9,3,2,10,7,6};
	int len = sizeof(a)/sizeof(int);
	selectSort(a,len);
	for(int i = 0;i<len;i++)
		printf("%d ",a[i]); 
	return 0;
} 

4. sort函数的应用

C语言中的qsort或者C++中的sort函数(推荐使用)

1.sort函数

必须加上头文件#include和using namespace std;
sort(首地址元素,尾元素地址的下一个地址,比较函数(选填));

简单示例

#include<cstdio>
#include<algorithm> 
using namespace std;
int main(){
	int a[6] = {9,4,2,5,6,-1};
	sort(a,a+4);	//a[0]到a[3]从小到大排序
	for(int i = 0;i<6;i++)
		printf("%d ",a[i]);
	printf("\n");
	sort(a,a+6);	//a[0]到a[5]从小到大排序
	for(int i = 0;i<6;i++)
		printf("%d ",a[i]);
	return 0;
} 

对double型数组和char数组用法相同

5.排序题的常用步骤

1.给出的每个数据有多个信息,如student结构体

首先实现cmp函数,先按的分数大小排,分数相同则按名字典序小的排

//对于结构体的比较 
bool cmp(Student a,Student b){
	if(a.score != b.score) return a.score > b.score;
	else return strcmp(a.name,b.name) < 0; 
} 

排名的实现(序列已经按分数从大到小排好),分数相同占用相同排位,r属性表示排名

stu[0].r = 1;
	for(int i = 0;i<n;i++){
		if(stu[i].score == stu[i-1].score){
			stu[i].r = stu[i-1].r;
		}else{
			stu[i].r = i + 1;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值