当先锋百科网

首页 1 2 3 4 5 6 7

一、直接插入排序

#include<stdio.h>
#include<iostream>
using namespace std;
/*
10
9 8 7 5 4 1 2 6 2 4
*/
void InsertSort(int a[],int n)
{
	int i,j;
	int temp; //暂存器 
	for(i=1;i<n;i++)
	{
		temp=a[i]; //暂时存放当前要插入的数 
		for(j=i-1;j>=0&&a[j]>temp;j--)
		{
			a[j+1]=a[j];
		}
		a[j+1]=temp;
	}
} 


int main()
{
	int a[100];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	
	InsertSort(a,n);
	
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<" ";
	}
	return 0;
}
 

时间复杂度O(n2)    稳定

 二、希尔排序

#include<iostream>
using namespace std;
/*
10
9 8 7 5 4 1 2 6 2 4
*/
void ShellSort(int a[],int n)
{
	int h;
	for(h=n/2;h>0;h=h/2) //分组每次为上次分组的一半 最终为1 
	{
		int i,j,temp;
		for(i=h;i<n;i++) //对各个组插入排序  i++ 
		{
			temp=a[i];
			for(j=i-h;j>=0&&a[j]>temp;j=j-h)
			{
				a[j+h]=a[j];
			}
			a[j+h]=temp;
		}
	} 
}

int main()
{
	int n;
	cin>>n;
	int a[100];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	
	ShellSort(a,n);
	
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<" ";
	 } 
	 return 0;
 } 

时间复杂度O(n1.3)  不稳定