笔试题汇集之排序算法(C/C++)

本文介绍了四种常见的排序算法在C/C++中的实现,包括冒泡排序、选择排序、插入排序和两种不同的快速排序方法。每个算法都有详细的代码展示,并通过交换函数swap进行元素调换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void swap(int* p, int* q) {

int temp;

temp = *p;

*p = *q;

*q = temp;

}

 

//冒泡排序

void sort(int* a, int n) {

for(int i=0; i<n-1;++i)

for(int j=0; j<n-i-1;++j)

if(a[j] > a[j+1])

swap<int>(a+j,a+j+1);

}

 

//选择排序

void sort2(int* a, int n) {

for(int i=0; i<n-1;++i) {

int temp = i;

for(int j=i; j<n; ++j){

if(a[temp] > a[j])

temp = j;

}

if(temp != i)

swap(a+temp, a+i);

}

}

 

//插入排序

void sort3(int* a, int n) {

for(int i=1; i<n; ++i){

for(int j=0; j<i; ++j){

if(a[i] < a[j]) {

swap(a+i, a+j);

for(int k=i; k>j+1;--k) {

swap(a+k, a+k-1);

}

break;

}

}

cout << "" << i << ":";

print(a, n);

}

}

 

//快速排序(一)

void sort4(int* a, int n) {

if(n <= 1)

return;

int left=0;

int right=n-1;

while(left<right) {

while(left<right&& a[left] <= a[right])

--right;

swap(a+left, a+right);

while(left<right&& a[left] <= a[right])

++left;

swap(a+left, a+right);

}

sort(a, left);

sort(a+left+1, n-left-1);

}

 

 

//快速排序(二)

void sort5(int* a, int n) {

if(n <= 1)

return;

int left=0;

int right=n-1;

int temp = a[0];

while(left<right) {

while(left<right&& temp <= a[right])

--right;

a[left] = a[right];

while(left<right&& a[left] <= temp)

++left;

a[right] = a[left];

}

a[left] = temp;

print(a, n);

sort5(a, left);

sort5(a+left+1, n-left-1);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值