1、算法思想如下图:

image.png

把待排序的数都存在对应的数组的下标中,如果待排序的数有重复的,就用对应的数组加一,最后把数组的下标打印出来即可。

2、源码(C)如下:

#include <stdio.h>

int main (void)

{

    int a[100], i, j, t, n;

//初始a[i]为0 

for (i = 0; i <= 100; i++)

{

   a[i] = 0;

}

   scanf ("%d", &n);

for (i = 1; i <= n; i++)

{

scanf ("%d", &t);

a[t]++; // 进行计数,即出现了多少次 

}

//i初值为100,先打印最大的下标 

for (i = 100; i >= 0; i--)

{

//如果a[i]等于1,怎么说明该数出现一次,a[i]大于1说明出现多次 

for (j = 1; j <= a[i]; j++)

{

printf ("%d ", i);

}

getchar();

return 0;

}

3、源代码(C++)如下:

#include <iostream>

using namespace std;

int main (void)

{

int a[101], i, j, t, n;

//初始a[i]为0 

for (i = 0; i <= 100; i++)

{

  a[i] = 0;

}

  cin >> n;

for (i = 1; i <= n; i++)

{

    cin >> t;

a[t]++; // 进行计数,即出现了多少次 

}

//i初值为100,先打印最大的下标 

for (i = 100; i >= 0; i--)

{

//如果a[i]等于1,怎么说明该数出现一次,a[i]大于1说明出现多次 

for (j = 1; j <= a[i]; j++)

{

cout << i << endl;

}

 return 0;

}