快排,堆排序,基数排序手写记录
2015-03-04 21:51
239 查看
闲来无事,手写一遍三种排序。
#include <iostream> #include <cstring> #include <cstdio> #include <vector> using namespace std; //快排 void quick_sort(int v[],int s,int e) { if (s>=e) return ; int key = v[s]; int i=s; int t=e; while (i<t) { while (i<t && v[t] >= key) t--; v[i] = v[t]; while (i<t && v[i] <=key) i++; v[t] = v[i]; } v[i] = key; quick_sort(v,s,i-1); quick_sort(v,t+1,e); } //堆排序 void adjust(int v[],int i,int n) { while (i*2+1<=n) { int next=i*2+1; if (i*2+2<=n && v[i*2+2]>v[i*2+1]) next=i*2+2; if (v[i]<v[next]) { int t=v[i]; v[i]=v[next]; v[next]=t; i=next; } else break; } return ; } void heap_sort(int v[],int n) { for (int i=(n-1)/2;i>=0;i--) adjust(v,i,n); for (int i=0;i<=n;i++) { int t=v[0]; v[0]=v[n-i]; v[n-i]=t; adjust(v,0,n-i-1); } } //基数排序 int maxd(int v[],int n) { int d=1; int m=1; for (int i=0;i<=n;i++) { while (v[i]/m>=n) { m*=10; d++; } } return d; } void radix_sort(int v[],int n) { int d=maxd(v,n); int p=1; vector <int> mv[10]; while (d--) { for (int i=0;i<n;i++) { int t=((v[i]/p)%10); mv[t].push_back(v[i]); } int s=0; for (int i=0;i<=9;i++) { for (int t=0;t<mv[i].size();t++) { v[s++]=mv[i][t]; } mv[i].clear(); } p*=10; } } int main() { int v[10]; for (int i=0;i<10;i++) cin>>v[i]; //quick_sort(v,0,9); //heap_sort(v,9); //radix_sort(v,10); for (int i=0;i<10;i++) cout<<v[i]<<" "; cout<<endl; }
相关文章推荐
- 手写快速排序【随机数作基数】
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 算法记录:MSD基数排序 + qsort 对字符串排序
- 快速排序,插入排序,归并排序,计数排序,基数排序,堆排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 快速排序,归并排序,堆排序,基数排序,插入排序,希尔排序,
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
- 算法学习记录-排序——堆排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 关于堆排序建堆时间以及堆排序的分析之暑假学习记录
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 【更新】排序算法比较:插入排序,冒泡排序,归并排序,堆排序,快速排序,计数排序,基数排序,桶排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 各种线性排序记录(计数排序,基数排序,桶排序) 及 希尔排序
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序