1.簡(jiǎn)單選擇排序
void selectSort(){
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 t=a[k];
a[k]=a[i];
a[i]=t;
}
}
2.直接插入排序
void insertSort(){
for(int i=1;i<n;i++){
int t=a[i];
int j=i;
while(j>0 && t<a[j-1]){
a[j]=a[j-1];
j--;
}
a[j]=t;
}
}
3.sort()函數(shù)
#include<algorithm>
#inclue<iostream>
using namespace std;
bool cmp(int a,int b){
return a<b; //按照從小到大的順序排列
}
int main(){
int a[5] = {12,2,43,8,0};
sort(a,a+5,cmp); //進(jìn)行排序
return 0;
}
4.解題技巧
1.相關(guān)結(jié)構(gòu)體的定義
在某些題目中可能會(huì)出現(xiàn)學(xué)生的考試成績(jī)瓶盛,學(xué)號(hào)渐尿,排名等信息。這些信息在排名的時(shí)候可能會(huì)用到扎筒,因此可以直接使用結(jié)構(gòu)體來創(chuàng)建學(xué)生對(duì)象:
struct Student{
char name[10];
int score;
char num[20];
int rank;
}stu[1000]; //直接定義一個(gè)Student的數(shù)組
2.cmp函數(shù)的編寫
在有些題目中可能會(huì)有這樣的要求:即當(dāng)學(xué)生的成績(jī)相同時(shí)艰山,按照學(xué)生姓名的字典序進(jìn)行排列。此時(shí)就可以用到cmp函數(shù)來使用sort()進(jìn)行排序:
bool cmp(Student a,Student b){
if(a.score == b.score){
return strcmp(a.name,b.name)<0;
}
else{
return a.score<b.score;
}
}
3.排名的實(shí)現(xiàn)
在有一些需要排名的題目當(dāng)中赦颇,可能會(huì)有這樣的要求:分?jǐn)?shù)不同的排名不同二鳄,分?jǐn)?shù)相同的排名相同,但是需要占用一個(gè)排名位媒怯。解決此類問題的方法是直接再結(jié)構(gòu)體當(dāng)中定義排名(rank)订讼,然后再進(jìn)行遍歷:
stu[0].rank = 1;
for(int i=1;i<n;i++){
if(stu[i].score == stu[i-1].score){
stu[i].rank = stu[i-1].rank;
}
else{
stu[i].rank = i+1;
}
}