#include<stdio.h>
#include<assert.h> void display(int * a, int n)
{
for(int i = 0; i < n; i++)
{
printf("%d,",a[i]);
}
printf("\n");
} void swap(int * a, int * b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
} void bubble_sort(int * a, int n)
{
int i = 0;
int j ;
for(i = 0; i < n-1; i++ )
{
for( j = i; j <= n-1; j++ )
{
if(a[j] >= a[i])
{
swap(&(a[j]), &(a[i]));
}
}
} } int main()
{
int a[8] ={2, 1, 3, 4, 5, 7, 6, 8};
int num = sizeof(a)/sizeof(int);
printf("before_sort:");
display(a, num);
bubble_sort(a,num);
printf("after_sort:");
display(a, num);
return 0; }

改进后:

#include <stdio.h>
#include <time.h> //交换两个数据
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
} //显示交换后的数组
void display_array( int a[], int n )
{
int i;
for( i = 0; i < n; i++ )
printf( "%d ", a[i] );
} //冒泡排序
void bubble_sort( int a[], int n )
{ int i ,j;
int flag = 1; //判断比较中是否发生了交换 1代表进行了交换
for(i = 0; i<n-1 && flag; i++ ) //flag的作用:若上次排序没有发生交换,就说明数组已经是有序
{ //这样做可以减少不必要的后续比较
flag = 0;
for(j = n -1; j >=i; j-- ) //第一次比较时 j是 0 ~ 7 第二次是 1 ~ 7
{
if(a[j] > a[j + 1])
{
swap(&(a[j]), &(a[j+1]));
flag = 1;
}
}
} } int main()
{
clock_t start, finish;
start = clock();
int n = 8;
int a[] = { 2, 1, 3, 4, 5, 7, 6, 8 };
printf( "Before sorting: " );
display_array( a, n );
bubble_sort( a, n );
printf( "After sorting: " );
display_array( a, n );
finish = clock();
printf("\n本次计算一共耗时: %f秒\n\n", (double)(finish-start)/CLOCKS_PER_SEC);
return 0;
}

H面试程序(15): 冒泡排序法的更多相关文章

  1. H面试程序(10): 字符串包含问题

    题目描述:判断第二个字符串中的元素是否都能在第一个字符串中找到: 注意:和字符串的字串的问题有所区别,如第一个字符串为  abcdefg,第二个字符串为 aaabc,第二个字串还是包含于第一个字符串 ...

  2. H面试程序(11): 判断字符串是否包含子串问题

    题目描述:                        如字符串str1为''abcdef'''                       字符串str2为'' bc''; 则字符串str1中含有 ...

  3. H面试程序(12): 输出字符串中第一个只出现一次的字母

    题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...

  4. H面试程序(29):求最大递增数

    要求:求最大递增数 如:1231123451 输出12345 #include<stdio.h> #include<assert.h> void find(char *s) { ...

  5. H面试程序(27):字串转换

    //1 字串转换 //问题描述: //将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a: //若输 ...

  6. H面试程序(16): 简单选择排序

    #include<stdio.h> #include<assert.h> void display(int * a, int n) { assert(a); for(int i ...

  7. H面试程序(28):字符串处理转换

    //2 字符串处理转换 //问题描述: //在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成, //其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词): //找 ...

  8. H面试程序(4):翻转句子中单词的顺序 .

    题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“stude ...

  9. H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒

    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒. 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒. ...

随机推荐

  1. 下载文件 ,调用系统的方法(UIDocumentInteractionController) 查看

  2. codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法

    题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/ ...

  3. 分组求和SQL示例

        1.ROLLUP和CUBE函数,自动汇总数据      select * from test_tbl的数据这样的      col_a col_b col_c      ---- ----- ...

  4. 帝国cms修改[!--show.listpage--]分页页码所生成的html标签

    在使用帝国cms系统时,我们用[!--show.page--]和[!--show.listpage--]来生成页码 其中[!--show.listpage--]所生成的html页码代码为: <a ...

  5. ISO/IEC 14443协议浅谈

    一. 非接触IC卡简介 非接触IC卡又称射频卡,是射频识别技术和IC卡技术有机结合的产物.它解决了无源(卡中无电源)和免接触这一难题,具有更加方便.快捷的特点,广泛用于电子支付.通道控制.公交收费.停 ...

  6. JAVA GUI学习 - JMenuBar菜单条、JMenu菜单、JMenuItem菜单项组件学习

    public class MenuBarKnow extends JFrame { JMenuBar jMenuBar; JMenu jMenuFile,jMenuEditor,jMenuAbout; ...

  7. AlertDialog弹出时背景明暗程度调整

    今天有个需求是把弹出AlertDialog时的变暗的背景调整得不要那么暗. 一开始懒惰就直接百度中文搜索,结果找到的代码试了几次都不行. 后来老老实实开google.stackoverflow搜索,搜 ...

  8. Flex 内置验证器—验证用户输入

    今晚对于Flex中的Validator类(所有验证器的父类)测试一下 ---->其中常用的验证类有StringValidator,NumberValidator,DateValidator 测试 ...

  9. 一个异或加密方案--C语言实现

    核心代码: char encrypt( char f , char c) { return f^c; } int OutEncrypt( char *FilePath, char *SecretWor ...

  10. WPF 自定义TextBox

    1.TextBox前加图标. 效果: <TextBox Width="300" Height="30" Style="{StaticResour ...