采用指针,在遍历同时消除重复,不单独安排冗余消除循环

#include <stdio.h>
#include <stdlib.h>
int sortArr(int total,int* arr){
    int* p=NULL;
    p=arr;
    for(int i=0;i<total;i++){
        scanf("%i",p);
        p++;
    }

    int* pNoRptPos=arr;
    int* rear=&arr[total-1];
    int* itor=arr;
    int* pCurMin=0;
    int  postMin=0,swapTmp;
    //example 8(  5 4 3 3 2 4 1 2)
    //            *1 4 3 3 2 4 5 2
    //            1 *2 3 3 4 4 5 2
    //            1 2 *3 3 4 4 5 2
    //            1 2 3 *4 3 4 5 2
    //            1 2 3 4 *5 4 3 2
    //            less than 5, then no swap any more
    while(pNoRptPos!=rear){ //make sure at least 2 element
        pCurMin=pNoRptPos; 
        itor=pNoRptPos;    
        do{
            itor++;
                //
            if(*pCurMin<=postMin && *itor>postMin){
                pCurMin=itor;
                continue; 
            }else if(*itor<*pCurMin && *itor>postMin){
                pCurMin=itor;
            }            
        }while(itor!=rear);//find the min element in current round scan

        //swap
        if(pCurMin != pNoRptPos && *pCurMin > postMin){
            //puts("swapped");
            swapTmp=*pCurMin;
            *pCurMin=*pNoRptPos;
            *pNoRptPos=swapTmp;    
        }
        if(*pNoRptPos>postMin){//postmin no change after 5 is confirmed
            postMin=*pNoRptPos;
        }
        pNoRptPos++;
    }
    return 0;
}
int main(void){
    int total=0;
    int* arr=NULL;
    int round=0;
    while(scanf("%i",&total) && round<2){
        arr=(int *)malloc( total * sizeof(int) );        
        sortArr(total,arr);
       int post=0;
        for(int i=0;i<total;i++){
            if(arr[i]>post){
                    printf("%i\n",arr[i]);
                    post=arr[i];
            }
        }
        round++;
     }
    return 0;
}