多种排序算法求中位数

给一列无序数组,求出中位数并给出算法的时间复杂度。

/*
File name:求中位数.cpp
Author:杨柳
Date:2017/5/25
IDE:DEV-c++ 
思想:把无序数组排好序,取出中间的元素
*/

#include
#include
using namespace std;
#define MAX 100
int array[MAX],arr[MAX];
int result=0;//保存中位数 

//简单选择排序 
int selectsort(int array[],int n){
	int temp,j,k;	//设置临时变量 
	for(int i=0;iarray[k])
				j=k;
				temp=array[i];
				array[i]=array[j];
				array[j]=temp;
		}
	}
	if(n%2==0){		//	若数组有奇数个元素,中位数是array[(n-1)/2]
		result=((array[n/2-1]+array[n/2])/2);
		return result;
	}
	else{			//若数组有偶数个元素,中位数为array[n/2-1]和array[n/2]两个数的平均值
		result=array[(n-1)/2];
		return result;
	}
}

//直接插入排序
int insertsort(int array[],int n){
	for(int i=1;i=0&&temp=0&&jarray[j+1]){  //若逆序交换 
				temp=array[j];
				array[j]=array[j+1];
				array[j+1]=temp;
				change=true;
			}
		}
		
	}
	
	if(n%2==0){		//	若数组有奇数个元素,中位数是array[(n-1)/2]
		result=((array[n/2-1]+array[n/2])/2);
		return result;
	}
	else{			//若数组有偶数个元素,中位数为array[n/2-1]和array[n/2]两个数的平均值
		result=array[(n-1)/2];
		return result;
	}
} 

//快速排序求中位数
int  quicksort(int array[],int min,int max){
	int high,low;
	if(mintemp){ //从右向左 
				high--;
			}
			if(low=0){
		shift(array,s,n);
		s--;
	}
	s=n-1;
	while(s>0){  //交换结点 
		t=array[0];
		array[0]=array[s];
		array[s]=t;
		shift(array,0,s);
		s--;
	}
	if(n%2==0){		//	若数组有奇数个元素,中位数是array[(n-1)/2]
		result=((array[n/2-1]+array[n/2])/2);
		return result;
	}
	else{			//若数组有偶数个元素,中位数为array[n/2-1]和array[n/2]两个数的平均值
		result=array[(n-1)/2];
		return result;
	}
} 

//合并两个有序序列 
void merge(int array[],int p,int q,int r){
	int n1,n2;
	n1=q-p+1;
	n2=r-q+1; 
	int arr1[n1+1],arr2[n2];
    for(int i=0;i!=n1;++i){
    	arr1[i]=array[i+p];
    
	}
		arr1[n1]=2000000;
	for(int j=0;j!=n2-1;++j){
		arr2[j]=array[q+j+1];
	}
		arr2[n2-1]=200000;
		int i=0,j=0;
	for( int k=p;k!=r+1;++k){
		if(arr1[i]>arr2[j]){
			array[k]=arr2[j];
		    ++j;
		}
		else{
			array[k]=arr1[i];
			++i;
		}
	}
}
//归并排序求中位数
void mergesort(int array[],int p,int r){
	if(p>select;
		switch(select){
			case 7:
				cout<<"这列无序数组的中位数为:"<1){
					arr[m++]=n1/2;
					n1=n1/2;
				}
				cout<<"这列无序数组的中位数为:"<>n;
	cout<<"请输入一列无序数组:"<>array[i];
	}

   int flag=1;
   while(flag==1){
	cout<

 

你可能感兴趣的:(算法编程)