一个程序题,大家给点思路
数组排序输入一个数组的值,求出各个值从小到大排序后的次序。
输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割
输出:各输入的值按从小到大排列的次序。
sample
input:
4
-3 75 12 -3
output:
1 3 2 1
--------------
两个-3都是最小的,所以排序都为1.
大家说这个程序怎么编,说下思想,谢谢。(暂不考虑时间复杂度,得出答案就行)
程序代码:
#define MAX_LEN 100
int index[MAX_LEN]={0};
void sort(int *list,int n)
{
int i = 0,j = 0;
int sameCount = 0;
for (i=0; i<n; i++)
{
//find count of smaller value in list
for (j=0; j<n; j++)
{
if (i!=j && list[i] > list[j])
{
index[i]++;
}
}
//no smaller value, this value duplicated
if (0 == index[i])
{
sameCount++;
}
}
for (i=0; i<n; i++)
{
//index start from 1
index[i] == 0? index[i]++ : (index[i] -= (sameCount-2));
}
}
程序代码:
#include <stdio.h>
int main (void) {
int n;
printf ("Enter length of array:");
scanf ("%i",&n);
printf ("Enter elements:\n");
int a[n],b[n],i,j,k,m,temp;
for(i=0;i<n;i++) {
scanf ("%i",&a[i]);
}
for(i=0;i<n;i++) {
b[i]=a[i];
}
//ascending sort array
for(i=0;i<n-1;i++) {
for(j=i+1;j<n;j++) {
if(a[i]>a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf ("After sorted Array ...\n");
for(i=0;i<n;i++) {
printf ("%i ",a[i]);
}
printf ("\nAfter remove repetitive elements:\n");
//uniq elements
i=0,j=0,k=0;
while(i<n) {
if(a[i]==a[i+1]) {
i++;
k++;
continue;
}
a[j]=a[i];
j++;
i++;
}
//fixed position
n=j;
m=i;
for(i=0;i<m;i++) {
for(j=0;j<n;j++) {
if(b[i]==a[j]) {
printf ("%i ",j+1);
}
}
}
printf ("\n");
return 0;
}
