题解 | #输入整型数组和排序标识#
输入整型数组和排序标识,对其元素按照升序或降序进行排序
https://www.nowcoder.com/practice/dd0c6b26c9e541f5b935047ff4156309
#include <stdio.h>
//利用快速排序算法实现
void Swap(int *a, int *b);
int Partition(int *numarr, int len, int start, int end);
void QuickOrder(int *numarr, int len, int start, int end);
void GetInputAndShowResult(void);
int main() {
GetInputAndShowResult();
return 0;
}
//一些可能的输入和输出
//1 [1] 0
//1 [1] 1
//2 [3 ,4] 0 -->[3, 4]
//Algo:QuickOrder
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int Partition(int *numarr, int len, int start, int end)
{
if((numarr==NULL) || (len<0) || (start<0) || (end>len-1))
{
perror("Input Error!");
}
if(start == end)
{
return -1;
}
int smallidx = start-1;
for(int idx=start; idx<end; idx++)
{
if(numarr[idx] < numarr[end])
{
smallidx++;
if(smallidx < idx)
{
Swap(&numarr[smallidx], &numarr[idx]);
}
}
}
smallidx++;
Swap(&numarr[smallidx], &numarr[end]);
return smallidx;
}
void QuickOrder(int *numarr, int len, int start, int end)
{
if(start == end)
{
return;
}
int idx = 0;
idx = Partition(numarr, len, start, end);
if(idx > start)
{
QuickOrder(numarr, len, start, idx-1);
}
if(idx < end)
{
QuickOrder(numarr, len, idx+1, end);
}
}
void GetInputAndShowResult(void)
{
int cnt = 0;
int numarr[1000] = {0};
int mode = 0;
//输入待排序的元素个数,并检查参数
scanf("%d", &cnt);
if((cnt<1)||(cnt>1000))
{
return;
}
//const int arrsize = cnt;
//int numarr[arrsize] = {0};
//输入待排序的元素
for(int i=0; i<cnt; i++)
{
scanf("%d", &numarr[i]);
if((numarr[i]<0)||(numarr[i]>100000))
{
return;
}
}
QuickOrder(numarr, cnt, 0, cnt-1);
//输入选择的模式:0为升序,1为降序
scanf("%d", &mode);
if(mode == 0)
{
for(int j=0; j<cnt;j++)
{
printf("%d ",numarr[j]);
}
}
else if(mode == 1)
{
for(int j=cnt-1; j>=0;j--)
{
printf("%d ",numarr[j]);
}
}
}