排序算法
来源:互联网 发布:陈墨网络营销策划机构 编辑:程序博客网 时间:2024/06/08 10:12
#include <iostream>using namespace std;//插入排序void InsertSort(int a[],int n){for(int i=1;i<n;i++){for(int j=i-1;j>=0 && a[j]>a[j+1];j--){swap(a[j],a[j+1]);}}} //希尔排序(间接插入排序)void ShellSort(int a[],int n){for(int gap = n/2;gap > 0;gap /= 2){for(int i=gap;i<n;i++){for(int j=i-gap;j>=0 && a[j]>a[j+gap];j-=gap){swap(a[j],a[j+gap]);}}}} //选择排序void SelectSort(int a[],int n){for(int i=0;i<n-1;i++){ //从第一个位置开始int index = i;for(int j=i+1;j<n;j++){ //寻找最小的数据索引 if(a[j]<a[i]){index = j;}}if(index != i){//如果最小数位置变化则交换 swap(a[i],a[index]);}}} //快速排序void QuickSort(int a[],int l,int r){if(l<r){int i = l,j = r, x = a[l];while(i < j){while(i < j && a[j] >= x){// 从右向左找第一个小于x的数 j--;}if(i < j){a[i++] = a[j];}while(i<j && a[i]<x){// 从左向右找第一个大于等于x的数i++;}if(i<j){a[j--] = a[i];}}a[i] = x;QuickSort(a,l,i-1);QucikSort(a,i+1,r); }} //归并排序/*归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(N*logN)的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的。*/void mergearray(int a[],int first,int mid,int end,int temp[]){int i = first,j = end;int m = mid,n = end;int k=0;while(i<=m && j<=n){if(a[i] <= a[j]){temp[k++] = a[i++];}else temp[k++] = a[j++];}while(i <= m){temp[k++] = a[i++];}while(j <= n){temp[k++] = a[j++];}for(i = 0;i < k;i++){a[first+i] = temp[i];}} void mergesort(int a[],int first,int end,int temp[]){if(firsr < end){mergesort(a,first,mid,temp);mergesort(a,mid+1,end,temp);mergearray(a,first,mid,end,temp);}}//有的书上是在mergearray()合并有序数列时分配临时数组,但是过多的new操作会非常费时。//因此作了下小小的变化。只在MergeSort()中new一个临时数组。后面的操作都共用这一个临时数组。bool MergeSort(int a[],int n){int *p = new int[n];if(p == NULL){return false;}mergesort(a,0,n-1,p);delete []p;return true;} int main(){ int n; while(cin>>n){ for(int i=0;i<n;i++){ cin>>a[i]; } ShellSort(a,n); for(int i=0;i<n-1;i++){ cout<<a[i]<<' '; } cout<<a[n-1]<<endl; } return 0; }
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- java多态机制理解以及强制类型转换(结合java与android)
- c# 使用AForge.NET操作摄像头操作代码
- 把 MongoDB 当成是纯内存数据库来使用
- 百度UEditor上传图片-再再总结一次
- Java高级工程师面试题目汇集
- 排序算法
- Windows8.1提升权限安装程序
- springMVC,aop管理log4j,把当前session信息和错误信息打印到日志
- 【PB】PowerBuilder API Site 说明
- 【转】基于内存数据库的分布式数据库架构
- .NET核心, 封装
- java中匿名类的解释使用
- java初级算法
- 三个类似Sinatra的Java框架介绍