C语言程序如下;
#include <stdio.h>
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*//* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相或漏高邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组 int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
elemType temp
int i, j
for (i=0 i<len-1 i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0 j<len-1-i j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if 搜亮(arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换衫尺(升序为左大于右,降序反之) */
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}int main (void) {
elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4}
int len = 10
int i
bubbleSort (arr, len)
for (i=0 i<len i++)
printf ("%d\t", arr[i])
putchar ('\n')
return 0
}
扩展资料:
算法分析
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C
和记录移动次数M均达到最小值:
所以,冒泡排序最好的时间复杂度为O(n)。
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行能n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为O(n^2)。
综上,因此冒泡排序总的平均时间复杂度为O(n^2)。
参考资料:百度百科-冒泡排序法
可令flag为相邻两森敬数判断时乘上的系数,升序时为岁好1,降序时为-1
这样 -a >-b 即等价于 a <b,就可将升序变为降序
具体代码和运行结果如乎春铅下:
可见同一个函数,flag=1时实现了升序,flag=0时实现了降序,望采纳~
附源码链接:冒泡排序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)