冒泡排序
来源:互联网 发布:网络推广要学哪些课程 编辑:程序博客网 时间:2024/06/08 05:39
冒泡排序是交换排序的一种。将待排序的数组Array[n]中的元素理解为不同重量的气泡Array[i],排序时重的气泡下沉,轻的气泡上浮,直到所有的气泡都是轻的气泡在上,重的气泡在下。
基本的冒泡排序算法:
#include<stdio.h>void BubbleSort(int *array, int n) { int a, i, j; for (i = n - 1; i > 0; i--) { for(j=0;j<i;j++) if (*(array + j) > *(array + j + 1)) { a = *(array + j); *(array + j) = *(array + j + 1); *(array + j + 1) = a; } }}void main() { int array[8] = { 5,9,2,16,7,4,12,15 }; int i; printf("待排序数组:"); for (i = 0; i < 8; i++) { printf("%d ", *(array + i)); } getchar(); BubbleSort(array, 8); printf("\n排序后的数组:"); for (i = 0; i < 8; i++) { printf("%d ", *(array + i)); } printf("\n\n");}
记录最后一次交换发生位置的冒泡排序算法:
#include<stdio.h>void BubbleSort(int *array, int n) { int bound = n; int m, i; int a; while (bound != 0) { m = 0; for (i = 0; i < bound; i++) { if (*(array + i) > *(array + i + 1)) { a = *(array + i); *(array + i) = *(array + i + 1); *(array + i + 1) = a; m = i; //记录最后一次发生交换的位置 } } bound = m; }}void main() { int array[9] = { 36,80,15,26,33,2,96,46,83 }; int i; printf("待排序数组:"); for (i = 0; i < 9; i++) { printf("%d ", *(array + i)); } getchar(); BubbleSort(array, 9); printf("\n排序后的数组:"); for (i = 0; i < 9; i++) { printf("%d ", *(array + i)); } printf("\n\n");}
下沉和上浮交替进行的双向起泡排序:
#include<stdio.h>void BubbleSort(int *array, int n) { int boundmin = 0; int boundmax = n; int mmin, mmax, i; int a; while (boundmin < boundmax) { mmin = 0; mmax = 0; for (i = boundmin; i < boundmax; i++) { //下沉 if (*(array + i) > *(array + i + 1)) { a = *(array + i); *(array + i) = *(array + i + 1); *(array + i + 1) = a; mmax = i; //记录下沉最后一次交换的位置 } } if (mmax == 0) break; boundmax = mmax; for (i = boundmax - 1; i > boundmin; i--) { //上浮 if (*(array + i) < *(array + i - 1)) { a = *(array + i); *(array + i) = *(array + i - 1); *(array + i - 1) = a; mmin = i; //记录上浮最后一次交换的位置 } } if (mmin == 0) break; boundmin = mmin; }}void main() { int array[9] = { 36,80,15,26,33,2,96,46,83 }; int i; printf("待排序数组:"); for (i = 0; i < 9; i++) { printf("%d ", *(array + i)); } getchar(); BubbleSort(array, 9); printf("\n排序后的数组:"); for (i = 0; i < 9; i++) { printf("%d ", *(array + i)); } printf("\n\n");}
时间复杂度:最好的时间为O(n);最坏时间O(n^2);平均时间复杂度O(n^2)。
空间复杂度:冒泡排序是就地排序,空间复杂度为O(1) (辅助空间为O(1))。
稳定性:冒泡排序是稳定的。
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 面向对象的计算机思维概述
- 泛型类
- Redis集群环境搭建
- 文章标题
- 操作系统存储管理之页式存储管理深入浅出
- 冒泡排序
- linux 文件基础介绍
- 分布式事物处理方式要点
- this指针
- zookeeper学习心得一:基础讲解---zk节点类型以及对节点的相应操作
- [编程题] 01翻转
- 第二行代码学习笔记——第一章:开始启程——你的第一行Android代码
- weibo客户端访问网页链接解析缓存问题?
- 集合框架-泛型高级之通配符