题解 | #输入整型数组和排序标识#
输入整型数组和排序标识,对其元素按照升序或降序进行排序
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]); } } }