您的位置:首页 > 其它

将无序数列升序排列,并输出排列结果和排列后的下标

2016-01-06 01:08 281 查看
#include<stdio.h>
#include<stdlib.h>

int main()
{
int a[] = { 8,3,10,5,7,1,2,6,4,9 };   //待排序数组
int temp[20] = { 0 };
int result[20];                     //下标存入的数组
int n = sizeof(a) / sizeof(a[0]);   //数组长度
int i;

for (i = 0; i < n; i++)             //得到每个数字出现的个数,temp[i]为i的个数
temp[a[i]]++;                   //eg:temp[5]为5出现的个数

for (i = 1; i < 20; i++)            //得到小于等于i的数的个数,temp[i]为小于等于i的个数
temp[i] += temp[i - 1];         //eg:temp[5]为小于等于5的数出现的个数

for (i = 0; i < n; i++)             //--temp[a[i]]表示a[i]这个数排列后应该放的位置
result[--temp[a[i]]] = i;       //表示把下标放在该放的位置上,i表示下标

for (i = 0; i < n; i++)              //输出下标所在的位置
printf("%d ", result[i]);

printf("\n");

for (i = 0; i < n; i++)              //输出升序排列的结果
printf("%d ", a[result[i]]);

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  一点一滴