用冒泡排序法对输入的10个数进行升序排序 并存入数组中

如题所述

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)。

参考资料:百度百科-冒泡排序法

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网