- #include <stdio.h>
- #include <ctype.h>
- #include <malloc.h>
- static void swapNum(int i, int j, int* intArray, int num);
- static int getSmallestButGreatThanIndex(int* intArray, int num, int j, int i);
- static void invertIntArray(int i, int* intArray, int num);
- static void prtIntArray(int* intArray, int num);
- int main(int argc,char* argv[]){
- int num = 0;
- int* intArray = NULL;
- int i = 0;
- int j = 0;
- //检查参数,必须是2个
- if(argc != 2){
- printf("there must be one parameter!\n");
- goto FINALLY;
- }
- //检查参数,参数必须是数字
- char* ptr = argv[1];
- while(*ptr != '\0'){
- if(isdigit(*(ptr++)) == 0){
- printf("please input a numble!\n");
- goto FINALLY;
- }
- }
- //将参数转换成int型
- num = atoi(argv[1]);
- intArray = (int*)malloc(sizeof(int) * num);
- //初始化数组:1,2,3,4,5,6......
- for(i=0; i<num; i++){
- intArray[i] = i+1;
- }
- //打印下原始数组
- printIntArray(intArray, num);
- //从数组最后面往前比较
- for(i=num-1,j=num-2; i>=1 && j>=0; i--,j--){
- //如果右边数的比左边数的大
- if(intArray[i] > intArray[j]){
- //将左边的数与右边数组中最小但是比左边的数大的数交换
- swapNum(i, j, intArray, num);
- //将左边数右边的数组序列倒置
- invertIntArray(i, intArray, num);
- //将整个数组打印
- printIntArray(intArray, num);
- //继续从数组的最后面往前面比较
- i = num;
- j = num - 1;
- }
- }
- FINALLY:
- if(intArray != NULL){
- free(intArray);
- intArray = NULL;
- }
- return 0;
- }
- static void swapNum(int i, int j, int* intArray, int num){
- int swapi = getSmallestButGreatThanIndex(intArray, num, j, i);
- int temp = intArray[j];
- intArray[j] = intArray[swapi];
- intArray[swapi] = temp;
- }
- static int getSmallestButGreatThanIndex(int* intArray, int num, int j, int i){
- int m = 0;
- int swapi = 0;
- int smallest = num + 1;
- for(m = i; m<num; m++){
- if(intArray[m] > intArray[j] && intArray[m] < smallest){
- swapi = m;
- smallest = intArray[m];
- }
- }
- return swapi;
- }
- static void invertIntArray(int i, int* intArray, int num){
- int m;
- int n;
- int temp;
- for(m=i, n=num-1; (m-n)<0; m++,n--){
- temp = intArray[m];
- intArray[m] = intArray[n];
- intArray[n] = temp;
- }
- }
- static void printIntArray(int* intArray, int num){
- int i;
- for(i=0; i<num; i++){
- printf("%d ",intArray[i]);
- }
- printf("\n");
- }
来源: http://www.phpxs.com/code/1004234/