//在基本的选择排序函数的基础之上,加上回调机制,实现回调函数 //旧方式 #include <stdio.h> void selectSortByUp(int *p,int n)//从小到大排序 { int i,j; for(i = 0;i<n-1;i++) { for(j = i+1;j<n;j++) { if(p[i] > p[j]) { p[i] = p[i]^p[j]; p[j] = p[i]^p[j]; p[i] = p[i]^p[j]; } } } } void selectSortByDown(int *p,int n)//从大到小排序 { int i,j; for(i = 0;i<n-1;i++) { for(j = i+1;j<n;j++) { if(p[i] < p[j]) { p[i] = p[i]^p[j]; p[j] = p[i]^p[j]; p[i] = p[i]^p[j]; } } } } int main(void) { int arr[10] = {6,5,4,3,2,1,7,8,9,0}; int i; selectSortByDown(arr,10); for(i= 0;i<10;i++) { printf("%d ",arr[i]); } putchar(10); selectSortByDown(arr,10); for(i= 0;i<10;i++) { printf("%d ",arr[i]); } putchar(10); return 0; }
添加回调接口,实现回调函数。
#include <stdio.h> int callBackCompare(int a,int b) { return a<b?1:0; //return a>b?1:0; } void selectSort(int *p,int n,int(*pf)(int,int))//从大到小排序 { int i,j; for(i = 0;i<n-1;i++) { for(j = i+1;j<n;j++) { if(pf(p[i],p[j])) { p[i] = p[i]^p[j]; p[j] = p[i]^p[j]; p[i] = p[i]^p[j]; } } } } int main(void) { int arr[10] = {6,5,4,3,2,1,7,8,9,0}; int i; selectSort(arr,10,callBackCompare); for(i= 0;i<10;i++) { printf("%d ",arr[i]); } putchar(10); return 0; }
//与上面这个对比一下,下面的为普通的间接调用。
#include <stdio.h> int callBackCompare(int a,int b) { return a<b?1:0; } void selectSort(int *p,int n)//从大到小排序 { int i,j; for(i = 0;i<n-1;i++) { for(j = i+1;j<n;j++) { if(callBackCompare(p[i],p[j])) { p[i] = p[i]^p[j]; p[j] = p[i]^p[j]; p[i] = p[i]^p[j]; } } } } int main(void) { int arr[10] = {6,5,4,3,2,1,7,8,9,0}; int i; selectSort(arr,10); return 0; }