面试常考:排序算法2(希尔排序,归并排序,堆排序)

希尔排序

O(N^d),最坏O(N^2),不稳定

void ShellSort(int A[],int N)
{
	/*O(N^d),最坏O(N^2),不稳定*/
	int Si,D,P,i;
	int tmp;
	int Sedgewick[]={929,505,209,109,41,19,5,1,0};//互质的复杂度最小

	for (Si=0;Sedgewick[Si]>=N;Si++)//增量不能大于长度
		;
	for (D=Sedgewick[Si];D>0;D=Sedgewick[++Si])
	{
		for (P=D;P=D&&A[i-1]>tmp;i-=D)
				A[i]=A[i-D];
			A[i]=tmp;
		}
	}
}

 简单选择排序

O(N^2),不稳定

void SimpleSelectionSore(int A[],int N)
{
	int i,j,min;
	for (int i=0;i

归并排序

#include 
using namespace std;

void Merge(int A[], int tmpa[], int  L, int R, int rightend)
{
	int LeftEnd, NumElements, Tmp;

	LeftEnd = R - 1;
	Tmp = L;
	NumElements = rightend - L + 1;
	while (L<=LeftEnd&&R

 

你可能感兴趣的:(数据结构与算法)