一个程序题,大家给点思路
数组排序输入一个数组的值,求出各个值从小到大排序后的次序。
输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割
输出:各输入的值按从小到大排列的次序。
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; }