插入排序 希尔排序 选择排序 归并排序 堆排序的算法实现,献给面试排序算法的同学们

来源:互联网 发布:快盘关闭 数据如何处理 编辑:程序博客网 时间:2024/05/30 23:02
// soft.cpp : 定义控制台应用程序的入口点。
//里面所有的排序算法都可以在电脑上运行,快排的算法在上篇文章中写了,所以这里没有再写
#include "stdafx.h"


void insert(int a[],int length)//插入排序
{
for(int i=1;i<length;i++)
{
int j=i+1;
int k=i+1;
if(a[j]<a[i])
{
a[0]=a[j];
while(a[0]<a[k-1])
{
a[k]=a[k-1];
k--;
}
a[k]=a[0];
}


}
}
void swap(int *a,int*b)//交换函数
{
int temp=*a;
*a=*b;
*b=temp;
}
void swap(int&a,int&b)//交换函数
{
int temp=a;
a=b;b=temp;
}
void show(int a[],int length)
{
for(int i=0;i<length;i++)
std::cout<<a[i]<<"  ";
std::cout<<std::endl;
}
void shell(int a[],int length)//希尔排序
{
int d=length/2;
while(d>=1)
{
for(int i=d+1;i<=length;i++)
{
int j=i;
int k=i;
if(a[j]<a[i-d])
{
a[0]=a[j];
while(a[0]<a[k-d]&&k-d>0)
{
a[k]=a[k-d];
   k-=d;
}
a[k]=a[0];
}

}
d=d/2;
}
}


void merge(int A[],int start,int mid,int end,int r[])//归并排序的一次归并过程
{
int i=start,j=mid+1,k,key=start;
while(i<=mid&&j<=end)
{
if(A[i]>A[j])
{
r[key++]=A[i++];
}
else r[key++]=A[j++];
}
while(i<=mid)
r[key++]=A[i++];
while(j<=end)
r[key++]=A[j++];
for(i=start;i<=end;i++)
A[i]=r[i];
}


void mergesort(int a[],int start,int end,int r[])//归并排序
{
if(start<end)
{
int mid=(start+end)/2;
mergesort(a,start,mid,r);
mergesort(a,mid+1,end,r);
merge(a,start,mid,end,r);
}
}
void selectsort(int a[],int length)//选择排序
{

while(length>0)
{
int j=length-1;
int max=0;
for(int i=0;i<=j;i++)
{
if(a[max]<a[i])
max=i;
}
swap(a[max],a[j]);
length--;
}


}
void shaixuan(int a[],int i,int length)//堆的筛选过程
{
if(i>=length) return;
else
{
if(a[i]<a[2*i]&&2*i<=length)
{
swap(a[i],a[2*i]);
shaixuan(a,2*i,length);
}
if(a[i]<a[2*i+1]&&2*i+1<length)
{
{
swap(a[i],a[2*i+1]);
shaixuan(a,2*i+1,length);
   }
}
}
}
void sort_shaixuan(int a[],int length)//建堆
{
for(int i=length/2;i>=1;i--)
shaixuan(a,i,length);
}
void sort_dui(int a[],int length)//堆排序
{
sort_shaixuan(a,length);
int heap_size=length;
while(heap_size>0)
{
show(a,heap_size);
swap(a[1],a[heap_size]);
show(a,heap_size);
heap_size--;
shaixuan(a,1,heap_size);

}


}


int _tmain(int argc, _TCHAR* argv[])
{
int a[]={0,4,5,3,4,2,8};
int b[7];
//sort_dui(a,6);
//show(a,7);
mergesort(a,0,6,b);
show(b,7);

std::cin.get();
return 0;
}

原创粉丝点击