1.冒泡排序法
#include<stdio.h>
int main()
{
int a[5]={5,4,3,2,1};
for(int i=1;i<=4;i++)//进行n-1趟
{
//第i趟从a[0]到a[n-i-1]都与他们下一个数比较
for(int j=0;j<5-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
}
2.选择排序法
算法复杂度O(n2)
#include<stdio.h>
int main(){
int a[5]={5,3,4,2,1};
for(int i=0;i<5;i++)//进行n趟操作
{
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;
}
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
}
3.插入排序法
#include<stdio.h>
int main(){
int a[5]={5,3,4,2,1},j=0;
for(int i=1;i<5;i++)//进行n-1趟操作
{
int temp=a[i];j=i;//temp临时存放a[i],j从i开始往前枚举
while(j>0 && temp<a[j-1]){//只要temp小于前一个元素a[j-1]
a[j]=a[j-1];//把a[j-1]后移一位至a[j]
j--;
}
a[j]=temp; //插入位置为j
}
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
}
4.自创排序法
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int a[5]={5,3,4,2,1};
for(int i=0;i<4;i++){
for(int j=i;j<5;j++){
if(a[i]>a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<5;i++){
cout<<a[i]<<endl;
}
}
5.stl模板排序
(1)默认排序(从小到大)
#include<iostream>
#include<algorithm>//算法
using namespace std;
int main(){
int a[5]={3,1,4,2,5};
sort(a,a+5);//首地址到尾地址+1;
for(int i=0;i<5;i++){
cout<<a[i]<<endl;
}
}
(2)自定义排序
#include<iostream>
#include<algorithm>//算法
using namespace std;
bool com(int a,int b){
return a>b;//可理解为当a>b时将a放到b前面
}
int main(){
int a[5]={3,1,4,2,5};
sort(a,a+5,com);//首地址到尾地址+1;
for(int i=0;i<5;i++){
cout<<a[i]<<endl;
}
}
以上代码仅供参考!其中内涵需自己理解掌握!如有不对之处,希望大家及时留言!