这一阶段的题都是各种排序
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS 1
#define N 5
#pragma warning(disable:4996)
int main()
{
int i, j, m, p, a[N];
for (i = 0; i < N; i++)//把输入的自然数一个个存进数组
scanf("%d", &a[i]);
for (i = 0; i < N - 1; i++)//第一层循环,进行N-1轮处理,目的是找到一堆值中最大的
{
p = i;//p记录最大值的下标
for (j = i + 1; j < N; j++) //j=i+1,是与i的下一个比较
{
if (a[p] < a[j])
p = j;
}
if (p != i)//最大值不是a[i]时才需要交换
{
m = a[p];
a[p] = a[i];
a[i] = m;
}
for (i = 0; i < N; i++)
printf("%d", a[i]);
}
return 0;
}
选择法排序,按书上写的,完全不知道哪里错、、
换方法。 选择和冒泡结合起来?
#include <stdio.h>
#include <string.h>
main()
{
int i,j,len;
char a[10000];
scanf("%s",a);
len = strlen(a);
for(i=0;i<len;i++) //冒泡排序
{
for(j=len-1;j>i;j--)
{
if(a[j]>a[j-1]) a[j]=a[j]+a[j-1]-(a[j-1]=a[j]);
}
}
int k; //选择排序
for(i = 0; i < len; i ++) {
for(j = i+1; j < len + 1; j ++) {
if(a[i] < a[j]) {
k = a[i];
a[i] = a[j];
a[j] = k;
}
}
}
printf("%s\n",a);
}
还有更简单的计数排序:
#include <stdio.h>
int num[10],x;
int main(){
while((x = getchar())!='\n') num[x - '0']++;
for(int i = 9;i >= 0;i --) while(num[i]--) printf("%d",i);
return 0;
}