对32位无符号整数进行排序

时间:2021-12-21 22:47:00
题目要求:

输入一个32位无符号整数,对每一个正整数十进制表示的每位数字按照降序对各位数字进行排序得到一个新数。并对调整后的该组正整数按照升序排列后输出。按照以下流程完成题目。

流程:

1. 输入无符号整数个数

2.逐个输入相应的无符号整数(32位无符号整数)

3.对输入的数据按照十进制每位的大小进行降序排列,并调整为新数据。如:243调整为432

4.对调整后的数据进行升序排序

5.输出调整后并排序后的数组

例如:input:6

123 调整为(321)

256调整为(652)

442调整为(442)

303调整为303

789调整为987

321调整为321

Output:321 321 330 442 652 987

考核目的:主要考算法和回调函数


以下是要用于排序和对于每个数据降序的算法函数:其中排序算法用的是快速排序

void sort( unsigned long array[],int left,int right )
{
int dp;
if (left<right)
{
dp=partition(array,left,right);
sort(array,left,dp-1);
sort(array,dp+1,right);
}
}

int partition( unsigned long array[],int left,int right )
{
int lo,hi,pivot,t;
pivot=array[left];
lo=left-1;
hi=right+1;

while(lo+1!=hi) {
if(array[lo+1]<=pivot)
lo++;
else if(array[hi-1]>pivot)
hi--;
else {
t=array[lo+1];
array[++lo]=array[hi-1];
array[--hi]=t;
}
}

array[left]=array[lo];
array[lo]=pivot;
return lo;
}
//降序函数
unsigned long int selfsort(unsigned long data,int len ){if(len <= 1){return data;}unsigned long array[10];for (int i=0;i<len;i++){array[i]=data%10;data=(data-array[i])/10;}sort(array,0,len);unsigned long int sum=0;for (int j=len-1;j>=0;j--){sum=sum*10+array[j];}return sum;////itoa();//char t = *str;//*str = *(str + len - 1);//*(str + len - 1) = t;//return (strrev(str + 1,len - 2) - 1);}





相关文章