冒泡排序算法与选择排序算法分析(C描述)
来源:互联网 发布:java和hadoop 编辑:程序博客网 时间:2024/05/22 12:19
1.冒泡排序
#include <stdio.h>void bubble_sort_enhance( int *unsortArray, int size);int main(int argc, char *argv[]){int unsortArray[6] = {2,5,6,4,7,3};bubble_sort(unsortArray,6); for(int i=0;i<6;++i){printf("%d ",unsortArray[i]);}return 0; }void bubble_sort( int *arr, int size){int i,j;for(i=0;i<size;i++){for(j=i+1;j<size;j++){if(arr[j]>arr[i]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp; }}}}
第一次排序:7 2 5 4 6 3
第二次排序:7 6 2 4 5 3
第三次排序:7 6 5 2 4 3
第四次排序:7 6 5 4 2 3
第五次排序:7 6 5 4 3 2
第六次排序:7 6 5 4 3 2
第二次排序:7 6 2 4 5 3
第三次排序:7 6 5 2 4 3
第四次排序:7 6 5 4 2 3
第五次排序:7 6 5 4 3 2
第六次排序:7 6 5 4 3 2
时间复杂度分析。其外层循环执行 N 次。内层循环最多的时候执行N-1次,最少的时候执行0次,平均执行
(N-1)/2
次。所以循环体内的比较交换约执行
N * (N - 1) / 2 = (N^2 - N)/2
(其中N^2
是仿照Latex中的记法,表示N的平方)。按照计算复杂度的原则,去掉常数,去掉最高项系数,其复杂度为O(N^2)
。其实留意观察,发现最后两次排序前后没有变化,但是多一次循环就多一定的性能开销,因此我们可以优化算法。
void bubble_sort_enhance( int *arr, int size){int i,j;for(i=0;i<size;i++){int sortedFlag = 1; for(j=i+1;j<size;j++){if(arr[j]>arr[i]){sortedFlag = 0;int temp = arr[i];arr[i] = arr[j];arr[j] = temp; }}if(sortedFlag){break;}}}改进后的算法增加了一个sortedFlag的标识来判断是否已经排序完成,完成就不再继续循环。
2.选择排序
void select_sort( int *arr, int size){int i,j,min,temp,n;for(i=0;i<size;i++){min = arr[i];n = i;for(j=i+1;j<size;j++){if(min>arr[j]){min = arr[j];n = j;//最小数的下标 }}if(n!=i){temp = arr[i];arr[i] = min;arr[n] = temp;}}}
第一次排序:2 5 6 4 7 3
第二次排序:2 3 6 4 7 5
第三次排序:2 3 4 6 7 5
第四次排序:2 3 4 5 7 6
第五次排序:2 3 4 5 6 7
第六次排序:2 3 4 5 6 7
第二次排序:2 3 6 4 7 5
第三次排序:2 3 4 6 7 5
第四次排序:2 3 4 5 7 6
第五次排序:2 3 4 5 6 7
第六次排序:2 3 4 5 6 7
时间复杂度分析。其外层循环执行 N 次。内层循环最多的时候执行N-1次,最少的时候执行0次,平均执行
(N-1)/2
次。所以循环体内的比较交换约执行
N * (N - 1) / 2 = (N^2 - N)/2
(其中N^2
是仿照Latex中的记法,表示N的平方)。按照计算复杂度的原则,去掉常数,去掉最高项系数,其复杂度为O(N^2)
。 1 0
- 冒泡排序算法与选择排序算法分析(C描述)
- 排序算法c语言描述---冒泡排序
- 冒泡排序算法与选择排序算法
- 算法设计与分析基础-3.1、选择排序、冒泡排序
- 冒泡算法与选择排序
- 排序算法c语言描述---选择排序
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- 【基础算法】选择排序与冒泡排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 算法分析之冒泡,快速,选择排序
- 选择排序、冒泡排序算法
- 数据结构与算法javascript描述(四) 冒泡排序
- 数据结构与算法分析(Java语言描述)(3)—— 冒泡排序
- C 排序算法 (冒泡)(选择)|(插入)|(快速)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- Git学习文档之一 学习文档-上传下载
- AutoCAD 2018安装破解
- java虚拟机
- NOIP 2016 换教室
- lintcode——将二叉树拆成链表
- 冒泡排序算法与选择排序算法分析(C描述)
- 前端简单处理input输入跨域攻击
- sql优化中遇到的问题
- Java中ArrayList类的用法
- Java synchronized详解
- Windows via C/C++:线程的执行时间(1)
- ViewPager 两边显示部分其他页
- Unity中文件流和WWW的方式加载图片
- liferay6.2通过事件机制实现不同portlet之间数据传递