C算法:冒泡排序实现对数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;

编程入门 行业动态 更新时间:2024-10-28 09:14:09

C算法:冒泡排序实现对<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;"/>

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算法:冒泡排序实现对数组(从大到小/从小到大)排序,且两数交换时不可使用第三变量;

本文发布于:2023-12-03 23:47:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1659116.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   变量   从小到大   大到   算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!