用冒泡排序法对输入的10个数进行升序排序 并存入数组中
1、打开sublime text 3,点击左上方的“文件”,选择“新建文件”,新建一个后缀名为.html的文件,并命名标题。
2、在Body中添加一个简单的input按钮,添加一个点击事件mymaopao,用来在浏览器中查看效果。
3、定义两个变量i,j。使用两个for循环嵌套遍历数组,第一个i作用为循环次数,第二个j作用是比较两个数大小。
4、比较数组中随机的两个数字的大小,如果第一个数比第二个数大,则交换顺序,存放在中间变量iNum中,并把第二个小的数放前面,如此规律循环下去。
5、写一个弹框,用来显示结果。
6、双击文件夹,在浏览器中查看,有一个按钮,点击它,浏览器中弹出了一个弹框,可以看到结果,此结果为一组升序的数字。
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)。
参考资料:百度百科-冒泡排序法
main(){
double x[10],t;
int i,j;
printf("please input 10 data\n");
for (i=0;i<10;i++)scanf("%lf",&x[i]);
for (i=0;i<9;i++)
for (j=i+1;j<10;j++){
if (x[i]>x[j]){
t = x[i];x[i]=x[j];x[j]=t;
}
}
for (i=0;i<10;i++) printf("%g ",x[i]);
return 0;
}
void main()
{
int i,j;
float a[10],t;
printf("请输入十个数字");
for(i=0;i<10;i++)
{
scanf("%f",&a[i]);
}
for(j=0;j<10;j++)
{
for(i=0;i<10-1;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<10;i++)
{
printf("%f",a[i]);
printf(" ");
}
}====