堆排序
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int h[N], cnt;
int n, m;
void down(int u)
{
int t=u;
if(u*2<=cnt&&h[t]>h[u*2]) t=u*2;
if(u*2+1<=cnt&&h[t]>h[u*2+1]) t=u*2+1;
if(u!=t)
{
swap(h[t], h[u]);
down(t);
}
}
int main()
{
scanf("%d %d", &n, &m);
for(int i=1;i<=n;i++)
scanf("%d", &h[i]);
cnt=n;
for(int i=n/2;i;i--)
down(i);
while(m--)
{
printf("%d ", h[1]);
h[1]=h[cnt];
cnt--;
down(1);
}
return 0;
}
冒泡排序
#include <stdio.h>
#define SIZE 10
int main()
{
int a[SIZE]={12 ,43,9,13,67,98,101,89,3,35};//十个数的无序数列
int i,j,t;
printf("此程序使用冒泡排序法排列无序数列!\n");
//冒泡排序
for(i=0;i<10-1;i++)//n个数的数列总共扫描n-1次
{
for(j=0;j<10-i-1;j++)//每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束
{
if(a[j]>a[j+1])//后一位数比前一位数小的话,就交换两个数的位置(升序)
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
printf("排列好的数列是:\n");
//输出排列好得吃数列
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
选择排序
#include <stdio.h>
void arr_out(int a[8])//输出函数
{
int i = 0;
for(i = 0;i < 8;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void arr_sort(int *p,int n)
{
int i,j;
int min = 0;
for(i = 0;i < n - 1;i++)//排序次数
{
min = i;
for(j = i + 1;j < n;j++)
{
if(p[j] < p[min])
{
min = j;//记录交换的元素下标值
}
}
if(i != min)
{
int temp = p[i];
p[i] = p[min];
p[min] = temp;
}
}
}
int main()
{
int a[8] = {0};
int i = 0;
for(i = 0;i < 8;i++)
{
scanf("%d",&a[i]);
}
arr_sort(a,8);//排序函数
arr_out(a);//输出函数
return 0;
}