数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;"/>
C算法:冒泡排序实现对数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;
需求:
1.写一段冒泡排序的函数,对int array[9] = {5, 9, 3, 1, 2, 8, 4, 7, 6};进行从小到大的排序,两数交换函数不可使用第三变量;
2.在以上的基础上,结合函数指针实现双向排序(既可以从小到大排序,也可以从大到小排序),用哪种排序由用户决定。
代码实现1:
#include <stdio.h>
void maopao(int* array,int len)
{int i,j;for(i=0;i<len-1;i++){for(j=0;j<(len-i-1);j++){if(array[j]>array[j+1]){array[j] = array[j] ^ array[j+1];array[j+1] = array[j] ^ array[j+1];array[j] = array[j] ^ array[j+1];}}}
}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));maopao(array,len);printfArray(array,len);return 0;
}
代码实现2:
#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=0;j<(len-i-1);j++){if(swap(array[j],array[j+1])){array[j] = array[j] ^ array[j+1];array[j+1] = array[j] ^ array[j+1];array[j] = array[j] ^ array[j+1];}}}
}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;
}
打印:
更多推荐
C算法:冒泡排序实现对数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;
发布评论