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;
}
}