冒泡、选择、插入、归并、快速排序代码
来源:互联网 发布:自学plc编程 编辑:程序博客网 时间:2024/06/06 08:47
原理请查看:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/
冒泡排序
void bubble_sort(int * array, int len){ int tmp; for (int i=0; i<len; ++i) { for (int j=0; j<(len-i-1); ++j) { if(array[j+1] < array[j]) { //tmp = array[j+1]; //array[j+1] = array[j]; //array[j] = tmp; swap(array[j+1], array[j]); } } }}
选择排序
void selection_sort(int * array, int len){ int tmp; int k = 0; for (int i=0; i<len; ++i)//从第一个数值开始遍历 { k = i; tmp = array[i]; for (int j=i+1; j<len; ++j)//循环找出最小数值 { if (tmp > array[j]) { tmp = array[j]; k = j; } } if (i != k)//有找到最小数值,则数据进行交换 { //array[k] = array[i]; //array[i] = tmp; swap(array[k], array[i]); } }}
插入排序
void insertion_sort(int * array, int len){ int tmp; for (int i=1;i<len;++i)//插入数值遍历 { tmp = array[i]; for (int j=i-1;j>=0;--j)//以自己一下的数值一个一个比较 { if (array[j] <= tmp)//当比自己大于或等于数据,则插入这个数值前面 { array[j+1] = tmp; break; } else//当比自己小数值,则将数值向前移动一位 { array[j+1] = array[j]; } if(0 == j)//如果比较到最后一个,直接插入自己值。 { array[j] = tmp; } } }}
归并排序
void Merge(int *vi, int low, int mid, int up){#if 0 int n1 = mid-low+1; int n2 = up-mid;#else int n1 = mid-low; int n2 = up-mid+1;#endif int *L = new int[n1+1]; int *R = new int[n2+1]; int i, j, k;// for (i=0; i<n1; i++){// L[i] = vi[low+i];// }// for (j=0; j<n2; j++){// R[j] = vi[mid+j+1];// }#if 0 memcpy(L, &vi[low], n1*sizeof(int)); L[n1] = 0x7fffffff; memcpy(R, &vi[mid+1], n2*sizeof(int)); R[n2] = 0x7fffffff;#else memcpy(L, &vi[low], n1*sizeof(int)); L[n1] = 0x7fffffff; memcpy(R, &vi[mid], n2*sizeof(int)); R[n2] = 0x7fffffff;#endif for (i=0, j=0, k=low; k<=up; k++) { if (L[i]<=R[j]) { vi[k] = L[i]; i++; } else { vi[k] = R[j]; j++; } } delete []L; delete []R;}void MergeSort(int *vi, int low, int up){ if (low < up) { int mid = (low+up)/2; MergeSort(vi, low, mid); MergeSort(vi, mid+1, up); Merge(vi, low, mid, up); }}int main(){ int array[] = {2,8,7,1,0,10,3}; int len = sizeof(array); MergeSort(array, 0, len-1); return 0;}
快速排序
int partition(int * vi, int low, int up){ int pivot = vi[up]; int i = low; for (int j = low; j < up; j++) { if(vi[j] <= pivot) { swap(vi[i], vi[j]); i++; } } swap(vi[i], vi[up]);//交换位置,防止同一个位置做基准 return i;}//C++'s array range should be [low, up], the same as [low, up+1)void quickSort(int * vi, int low, int up){ if(low < up) { int mid = partition(vi, low, up); //mid这个值已经做为基准了,所以后面用mid-1和mid+1; //Watch out! The mid position is on the place, so we don't need to consider it again. //That's why below is mid-1, not mid! Otherwise it will occur overflow error!!! quickSort(vi, low, mid-1); quickSort(vi, mid+1, up); }}int main(){ int array[] = {2,8,7,1,0,10,3}; int len = sizeof(array); quickSort(array, 0, len-1); return 0;}
0 0
- 冒泡、选择、插入、归并、快速排序代码
- 冒泡、选择、插入、归并、希尔、快速排序效率比较代码
- 排序算法-冒泡、插入、归并、希尔、快速、选择--代码总结
- 冒泡、选择、插入、归并、希尔、快速排序效率比较代码 .
- 插入 | 希尔 | 冒泡 | 快速 | 选择 | 归并排序
- c排序算法:选择、冒泡、插入、快速、归并、堆排序
- 各种排序算法-Java-冒泡、选择、插入、快速、归并排序
- 六种排序 冒泡 选择 插入 归并 快速 堆排序
- java多种排序方式以及代码(冒泡,插入,选择,快速,归并,希尔,折半)
- 6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速
- 链表之排序(插入、选择、归并、快速、冒泡)
- 数组排序(插入、选择、希尔、堆、归并、快速、冒泡)
- 冒泡、鸡尾酒、选择、插入、归并、快速排序的C++程序
- 冒泡,插入,选择,归并,快速排序的C++实现
- C 各种排序(选择/冒泡/快速/插入/希尔/归并/堆)
- 冒泡、选择、插入、归并、快速、堆排序效率测试
- 直接插入、冒泡、快速、简单选择、堆、归并排序算法
- 排序——冒泡、归并、快速、选择、插入、堆
- win7 x64 上安装theano
- 将App设置为设备的启动应用
- ViewPager和ListView
- Android--RecyclerView,SwipeRefreshLayout相关
- 阿里百川码力APP监控 来了!
- 冒泡、选择、插入、归并、快速排序代码
- Activity与intent
- 【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
- Windows 下的 Redis 集群搭建
- inotify使用
- http协议、http事务、URL、http请求的方式、响应码信息、http1.0和1.1区别
- super关键字
- 开篇
- centos7安装jdk+tomcat+nginx+mysql