#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;
}
将无序数列升序排列,并输出排列结果和排列后的下标
最新推荐文章于 2022-10-23 23:04:46 发布