C++ 内部排序(一)

先讲两个概念,所谓内部排序,指待排序的节点均存储在内存中。所谓排序的稳定性,指排序后,值相等的两个元素原来相对的位置是否发生变化了.举个例子。

待排序列:3(1),1,5,3(2)  稳定排序:1,3(1),3(2),5  不稳定排序:1,3(2),3(1),5

下面写了插入排序,冒泡排序和选择排序.

/*sorting functions*/
#include <iostream>
#define MAXN 7
using namespace std;

void insert_sort(int *a, int length);
void buble_sort(int *a, int length);
void select_sort(int *a, int length);

int main()
{
	int a[MAXN] = {34, 12, 67, 33, 23, 56, 78};
	int length = MAXN;
	//insert_sort(a, length);
	//buble_sort(a, length);
	select_sort(a, length);
	return 0;
}

/*稳定排序*/
void insert_sort(int *a, int length)
{
	int temp;
	int i,j;
	for(i=1; i<length; i++)
	{
		temp = a[i];
		for(j=i-1; j>=0 && temp<a[j]; j--)
		{
			a[j+1] = a[j];
		}
		a[j+1] = temp;
	}

	for(i=0; i<length; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

/*稳定排序*/
void buble_sort(int *a, int length)
{
	int i,j,temp;
	for(i=0; i<length; i++)
	{
		for(j=0; j<length-1; j++)
		{
			if(a[j]>a[j+1])
			{
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;
			}
		}
	}
	for(i=0; i<length; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

/*不稳定排序*/
void select_sort(int *a, int length)
{
	int i,j,k,temp;
	for(i=0; i<length-1; i++)
	{
		k = i;
		for(j=i+1; j<length; j++)
		{
			if(a[j]<a[k])
			{
				k=j;
			}
		}
		temp = a[i];
		a[i] = a[k];
		a[k] = temp;
	}
	for(i=0; i<length; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2013-09-05 14:32  andywangguanxi  阅读(269)  评论(0编辑  收藏  举报