各种排序
来源:互联网 发布:photoshop cc mac下载 编辑:程序博客网 时间:2024/05/19 22:02
#include<iostream>
using namespace std;
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
// insert sort o(n^2)
void insert_sort(int list[], int n){
for(int i = 1; i < n; ++i){
for(int j = i; j > 0; --j){
if(list[j] < list[j-1]){
swap(list[j], list[j-1]);
}
}
}
}
// o(n^2)
void buttle_sort(int list[], int n){
for(int i = 0; i < n; ++i){
for(int j = 0; j < n-i-i; ++j){
if(list[j+1] < list[j]){
swap(list[j+1], list[j]);
}
}
}
}
//优化后冒泡排序
void abutter_buttle_sort(int list[], int n){
int last = n;
while(last > 0){
int i = 0;
for(; i < last - 1; ++i){
if(list[i] > list[i+1]){
swap(list[i], list[i+1]);
}
}
last = i;
}
}
// quick_sort
int once_sort(int list[], int l, int r){
int first = l;
int end = r;
//默认中间值mid 就是first
while(first < end){
//右侧值必须大于mid
while(first < end && list[first] <= list[end]){
--end;
}
//退出循环说明:右侧值找到比mid小的值,需要交换
if(first < end){
swap(list[first], list[end]);
}
while(first < end && list[first] < list[end]){
++first;
}
//退出循环说明:左侧值找到比mid大的值,需要交换
if(first < end){
swap(list[first], list[end]);
}
}
return first;
}
// o(nlogn)
void quick_sort(int list[], int l, int r){
if(list == NULL || l < 0 || r < 0 || l >= r){
return;
}
int mid = once_sort(list, l, r);
quick_sort(list, l, mid - 1);
quick_sort(list, mid + 1, r);
}
//heap o(nlgN)
void heap_once_sort(int list[], int root, int n){
int child = 2*root + 1;
if(child < n){
int rchild = child + 1;
if(rchild < n && list[rchild] > list[child]){
child = rchild;
}
if(list[root] < list[child]){
swap(list[root], list[child]);
heap_once_sort(list, child, n - root);
}
}
}
void heap_sort(int list[], int n){
for(int i = n/2 - 1; i >= 0; --i){
heap_once_sort(list, i, n);
}
for(int i = n -1 ; i>=1; --i){
swap(list[i], list[0]);
heap_once_sort(list, 0, i);
}
}
int main(){
int list[5] = {2,6,1,4,7};
//insert_sort(list, 5);
//buttle_sort(list, 5);
//abutter_buttle_sort(list, 5);
//quick_sort(list, 0, 4);
heap_sort(list, 5);
for(int i = 0; i < 5; ++i){
cout << list[i] << " ";
}
cout << endl;
return 0;
}
using namespace std;
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
// insert sort o(n^2)
void insert_sort(int list[], int n){
for(int i = 1; i < n; ++i){
for(int j = i; j > 0; --j){
if(list[j] < list[j-1]){
swap(list[j], list[j-1]);
}
}
}
}
// o(n^2)
void buttle_sort(int list[], int n){
for(int i = 0; i < n; ++i){
for(int j = 0; j < n-i-i; ++j){
if(list[j+1] < list[j]){
swap(list[j+1], list[j]);
}
}
}
}
//优化后冒泡排序
void abutter_buttle_sort(int list[], int n){
int last = n;
while(last > 0){
int i = 0;
for(; i < last - 1; ++i){
if(list[i] > list[i+1]){
swap(list[i], list[i+1]);
}
}
last = i;
}
}
// quick_sort
int once_sort(int list[], int l, int r){
int first = l;
int end = r;
//默认中间值mid 就是first
while(first < end){
//右侧值必须大于mid
while(first < end && list[first] <= list[end]){
--end;
}
//退出循环说明:右侧值找到比mid小的值,需要交换
if(first < end){
swap(list[first], list[end]);
}
while(first < end && list[first] < list[end]){
++first;
}
//退出循环说明:左侧值找到比mid大的值,需要交换
if(first < end){
swap(list[first], list[end]);
}
}
return first;
}
// o(nlogn)
void quick_sort(int list[], int l, int r){
if(list == NULL || l < 0 || r < 0 || l >= r){
return;
}
int mid = once_sort(list, l, r);
quick_sort(list, l, mid - 1);
quick_sort(list, mid + 1, r);
}
//heap o(nlgN)
void heap_once_sort(int list[], int root, int n){
int child = 2*root + 1;
if(child < n){
int rchild = child + 1;
if(rchild < n && list[rchild] > list[child]){
child = rchild;
}
if(list[root] < list[child]){
swap(list[root], list[child]);
heap_once_sort(list, child, n - root);
}
}
}
void heap_sort(int list[], int n){
for(int i = n/2 - 1; i >= 0; --i){
heap_once_sort(list, i, n);
}
for(int i = n -1 ; i>=1; --i){
swap(list[i], list[0]);
heap_once_sort(list, 0, i);
}
}
int main(){
int list[5] = {2,6,1,4,7};
//insert_sort(list, 5);
//buttle_sort(list, 5);
//abutter_buttle_sort(list, 5);
//quick_sort(list, 0, 4);
heap_sort(list, 5);
for(int i = 0; i < 5; ++i){
cout << list[i] << " ";
}
cout << endl;
return 0;
}
0 0
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 排序 各种
- 各种排序
- Spring MVC学习(二)-------Spring MVC入门
- Java控制线程
- CMake学习(四)
- 代码整洁之道精华——第十章 类
- 2017年欢聚时代实习生招聘面经
- 各种排序
- hadoop wordcount深层讲解
- 排序算法总结(二)-------选择,堆,冒泡,快速,归并排序(java实现)
- union find(并查集)
- 二叉搜索树的插入和删除
- 程序员面试经典--删除链表重复节点
- 网站站群相关工具001---WebPlus集群平台
- 创建一个数组, 并实现函数 init(),empty(), reverse()
- JDBC连接Mysql和Oracle的源码格式