需求:
使用选择排序实现从(大到小/从小到大)排序,且元素交换不可使用第三变量
(异或交换法)
代码实现:
#include <stdio.h>
void maopao(int* array,int len,int(*swap)(int a,int b))
{int i,j;for(i=0;i<len-1;i++){for(j=i+1;j<len;j++){if(swap(array[i],array[j])){array[i] ^= array[j];array[j] ^= array[i];array[i] ^= array[j];}}}
}int asc(int a,int b){return a>b;
}int desc(int a,int b){return a<b;
}void printfArray(int* array,int len)
{int i;for(i=0;i<len;i++){printf("%d",array[i]);}printf("\n");
}int main()
{int array[9] = {5, 9, 3, 1, 2, 8, 4, 7, 6};int len = (sizeof(array)/sizeof(int));int mode;printf("please input mode num (1:asc 2:desc)\n");scanf("%d",&mode);switch(mode){case 1:maopao(array,len,asc);printf("asc:\n");break;case 2:maopao(array,len,desc);printf("desc:\n");break;default:printf("input mode num error!\n");break;}printfArray(array,len);return 0;
}
打印: