简单排序
来源:互联网 发布:淘宝聚划算怎么报名 编辑:程序博客网 时间:2024/06/08 04:05
简单排序算法的实现:冒泡排序、选择排序、插入排序bubble_sortbubblesortselect_sortinset_sorttest
冒泡排序:两两比较相邻的数字,如果反序就交换,直到没有反序的为止。
1 void bubble_sort(int *br,int len) 2 { 3 for(int i = 0;i<len-1;i++) 4 { 5 for (int j = len-1;j>=i;j--) 6 { 7 if(br[j] > br[j+1]) 8 { 9 swap(&br[j],&br[j+1]);10 }11 }12 }13 }
但例如序列如果是{2,1,3,4,5,6,7,8,9};这只需要一趟冒泡就OK;所以改进的冒泡就来了:
1 //冒泡排序优化 2 void bubblesort(int *ar,int len) 3 { 4 bool flag = false; 5 for (int i = 0;i<len-1;i++) 6 { 7 flag = false; 8 for (int j = 0;j<len-1-i;j++) 9 {10 if (ar[j] > ar[j+1])11 {12 flag = true;13 swap(&ar[j],&ar[j+1]);14 }15 {16 break;17 }18 }19 }20 }
复杂度呢两个for循环 所以O(N^2)
简单选择排序:选择一个值作为基准,如果遇到比它小的就替换,直到遇到最小的位置
1 void select_sort(int *ar,int len) 2 { 3 int min = 0; 4 for (int i=0;i<len-1;i++) 5 { 6 min = i; 7 for (int j =i+1;j<len;j++) 8 { 9 if (ar[min] > ar[j])10 {11 min =j ;12 }13 }14 if (i != min)15 {16 swap(&ar[i],&ar[min]);17 }18 19 }20 }
当然因为算法简单,所以效率不高,时间复杂度O(N^2),在性能上略优于冒泡
插入排序:通俗讲就跟打扑克牌一样,每次插入的时候将序排好
void insert_sort(int *ar,int len){ int j; for (int i=1;i<len;i++) { if (ar[i]<ar[i-1]) { ar[0] = ar[i]; for (j = i-1;ar[j]>ar[0];j--) { ar[j+1] = ar[j]; } ar[j+1] = ar[0]; } }}
时间复杂度大概在O(n^2/4)== O(n^2)
自己写的main函数测试:
1 int main() 2 { 3 int arr[] = {9,1,5,8,3,7,4,6,2,0}; 4 int brr[] = {2,1,3,4,5,6,7,8,9}; 5 //bubble_sort(arr,sizeof(arr)/sizeof(arr[0])); 6 //bubblesort(brr,sizeof(brr)/sizeof(brr[0])); 7 int len = sizeof(arr)/sizeof(arr[0]); 8 //select_sort(arr,len); 9 insert_sort(arr,len);10 show(arr,sizeof(arr)/sizeof(arr[0]));11 }
因为里面用了自己实现的交换函数和打印函数
void swap(int *a,int *b){ int tmp = *a; *a = *b; *b = tmp;}void show(int *cr,int len){ for (int i = 0;i < len;i++) { printf("%d\n",cr[i]); }}
好吧 总结一下算复习算巩固!!!
阅读全文
0 0
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- 简单排序
- STL部分的实现
- C++ 两种设计模式:单例模式和观察者监听者模式
- Android:使用JitPack发布Github开源库
- 百练_2767:简单密码
- C语言基础
- 简单排序
- win10下安装mysql-5.7.19-winx64
- 一元多项式的相加(单链表的应用)
- 高级I/O框架库libevent
- 0-1背包-动态规划
- 20170704学习笔记
- python中*args **kw表示的是什么
- 20170705学习笔记
- phpstorm配置Xdebug进行调试PHP教程