基本的排序算法之—— 冒泡排序(稳定)(对于固定的内存空间数组或顺序表,对于单链表也可以)
2015-04-18 23:51
369 查看
/********************************************************************** * Copyright (c)2015,WK Studios * Filename: * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 4 18 ************************************************************************/ #include<stdio.h> #include<assert.h> void bubbleSort1(int *a, int len) { for(int i=0;i<len;i++) { for(int j=0;j<len-1-i;j++) { if(a[j]>a[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } //优化代码 void bubbleSort2(int *arrary, int len) { assert(arrary != NULL); int i = 0; bool tag = true; while (tag)//减少一个循环 { tag = false; for (int j = 0; j < len-1-i; j++) { if (arrary[j] > arrary[j+1]) { int tmp = arrary[j+1]; arrary[j+1] = arrary[j]; arrary[j] = tmp; tag = true; } } ++i;//妙处在于利用一个循环的控制条件控制了i和j的增长,最坏的情况是i=len-1,也就是当i=len-1时候进入内循环j 会因为判断不会执行循环,之后退出循环i++,此时i=len 此时while循环也就退出来了 } } int main() { int a[]={9,8,7}; //由小到大排列 bubbleSort2(a, sizeof(a)/sizeof(a[0])); //bubbleSort2(a, sizeof(a)/sizeof(a[0])); for(int i=0;i<8;i++) printf("%d\n",a[i]); return 0; }
相关文章推荐
- 基本的排序算法之——插入排序法(稳定)(对于固定的空间数组或者顺序表)
- 基本的排序算法之——选择排序法(对于固定的空间数组或者顺序表)
- 算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序
- C# 数组排序 基本算法
- 数组基本算法(最大值,最小值,总和,平均数,复制,反转,排序)
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- 数据结构 求链表的长度以及用冒泡排序的算法对链表中的值进行排序
- 算法题:将一个数组中所有奇数放前面和偶数放后面(不开辟新的内存空间)
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 单链表,建立,完成固定数组的排序
- 【C语言】写冒泡排序可以排序一个整型数组。
- #旧代码# 基本算法练习:常见排序/KMP字符串查找/链表反转
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 学生类封装 , (链表)插入排序成绩 无动态数组 ,动态开辟空间 以及静态函数,数据成员的使用
- #defind 语句也可以定义绝对内存空间,用以指向一个固定的字
- 给定一个未排序的整数数组,找到第一个缺失的正整数 您的算法应在O(n)时间运行,并使用恒定空间。
- 长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组,只能用乘法,不可 以用除法。要求对算法的时间复杂度和空间复杂度作出分析,可以写思路也可以写程序。
- 数据结构和算法-002 数组排序 冒泡排序
- 练习1:冒泡排序 , 既可以学算法,又可以熟悉数组,循环的用法.
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?