标签:排序 简单 自己 lse 构建 http 代码 数组排序 clu
用分治算法来求一个数组的排序
分治算法:例如:将两个数组a[100]={2,4,5,7,1,2,,3,6}。这个数组排序
先将这个数组分为均两部分得到{2,4,5,7},{1,2,3,6}。
再将{2,4,5,7}分为两部分{2,4},{5,7}。
再分为{2},{4}。
这时一个数就不用排序了,直接输出自己。
简单问题,就可以用二分或者三分来算。
上代码:
#include <bits/stdc++.h> using namespace std; void hebing(int a[],int b,int mid,int c) {int* k=new int [1000]; int i=b,j=mid+1; int u=0; while(i<=mid&&j<=c) { if(a[i]<=a[j]) {k[u++]=a[i];i++;} else { k[u++]=a[j]; j++; } } while(i<=mid){k[u++]=a[i];i++;} while(j<=c){k[u++]=a[j];j++;} for(int i=b,u=0;i<=c;i++,u++) { a[i]=k[u]; } delete[] k; } // 这个hebing函数的具体代码。 void paixu(int a[],int b,int c) //b表示起始位置,c表示终止位置。 { int mid; if(b>=c) return ; mid=(b+c)/2; paixu(a,b,mid); paixu(a,mid+1,c); //构建两个排好序的数组(从起始到中间,从中间到终止) hebing(a,b,mid,c); //将两个分别排好序的数组,整体排序,合二为一,组成一个我们想要的排好序的数组。 } int main() { int n; int a[1000]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } paixu(a,0,n-1); for(int i=0;i<n;i++) cout<<a[i]<<" "; return 0; }
标签:排序 简单 自己 lse 构建 http 代码 数组排序 clu
原文地址:https://www.cnblogs.com/zhuyukun/p/12288352.html