王道考研2013版机试(排序)

排序

冒泡排序

for (int i=0;i<n;i++){
    forint j=0;j<n-1-i;j++){
    //由于i=0时,j作为两两比较元素的下标,需要比较从j=0到n-1,
    //完成比较后此时第一个最小元素已经不需要比较了,
    //所以i每次增加1,已经做过大小比较的元素增加1,所以j的范围是从0到n-1-i
    if(buf[j]>buf[j+1]){
    int tmp=buf[j];
    buf[j]=buf[j+1];
    buf[j+1]=tmp;
   //实现相邻元素按从小到大排序
    }
    }
    }

考虑时间O(n)=n^2和空间复杂性 O(n)=n*单个存储单元内存32bit,使用快速排序、归并排序

快速排序

头——#include<algorithm.h>
目的:sort库函数
c中有qsort函数
using namespace std;

int main(){

sort(buf,buf+n);//待排序内存的起始地址和结束地址

}

用sort实现降序——升序的倒序
bool cmp (int x,int y) { 
//定义排序规则 
return x > y;
}
int main () {
sort (buf,buf + n,cmp); 
//使用该重载形式,自义的排列规则
//当 cmp 的返回值为 true 时,
// 即表示 cmp 函数的第一个参数将会排在第二个参数之前
}
sort完成数组排序
#include <stdio.h> 
#include <algorithm> 
#include <string.h> 
using namespace std; 
struct E { 
char name[101]; 
int age; 
int score;
}buf[1000]; 
bool cmp(E a,E b) { 
//实现比较规则 
if (a.score != b.score) 
return a.score < b.score; 
//若分数不相同则分数低者在前
int tmp = strcmp(a.name,b.name); 
if (tmp != 0) 
return tmp < 0; 
//若分数相同则名字字典序小者在前 
else return a.age < b.age; 
//若名字也相同则年龄小者在前
}
int main () { 
 ...
sort(buf,buf + n,cmp);//定义规则对数组进行排序
...
return 0;
}
重载<符号实现排序
bool operator < (const E &b) const { //算符重载直
if (score != b.score) 
return score < b.score; 
int tmp = strcmp(name,b.name); 
if (tmp != 0) 
return tmp < 0; //返回tmp与0比较的T与F
else return age < b.age;
}
}buf[1000];

int main () { 
 ...
sort(buf,buf + n,cmp);//定义规则对数组进行排序
...
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值