排序算法汇总

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

//选择法排序
//原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。
void SelectSort(int *ipOriginData,//[I]初始元素
			   int iCount//[I]元素个数
			   )
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}  printf("\n");

	for (i=0;i<iCount;i++)
	{
		int j=0 ,k=0,iMin=0;

		k=i;
		iMin=ipOriginData[i];  /*将最小元素初始化为第i个元素*/
		for (j=i;j<iCount;j++)   /*j前面的数据已排好序,从j开始往后找到最小的元素*/
		{
			if (iMin>ipOriginData[j])
			{
				/*记录较小元素的值和下标*/
				k=j;
				iMin=ipOriginData[j];  
			}
		}
		/*将j后面最小的值和第i个元素交换位置*/
		ipOriginData[k]=ipOriginData[i];
		ipOriginData[i]=iMin;
	}
	/*输出排序后的元素*/
	printf("Select Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}
//冒泡(起泡)法排序
//将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。
void BubbleSort(int *ipOriginData,//[I]初始元素
				int iCount//[I]元素个数
				)
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	for (i=0;i<iCount-1;i++) /*共需要排序iCount-1次*/
	{
		int j=0;

		for (j=0;j<iCount-1-i;j++)
		{
			if (ipOriginData[j]>ipOriginData[j+1])/*将值较大的元素往下沉*/
			{
				int iTemp=0;

				iTemp=ipOriginData[j+1];
				ipOriginData[j+1]=ipOriginData[j];
				ipOriginData[j]=iTemp;
			}
		}
	}
	/*输出排序后的元素*/
	printf("Bubble Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}
//直接插入排序
//将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
void InsertSort(int *ipOriginData,//[I]初始元素
				int iCount//[I]元素个数
				)
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	for (i=1;i<iCount;i++)
	{
		int j=0;

		for (j=0;j<i;j++)
		{
			if (ipOriginData[i]<ipOriginData[j])
			{
				int m=0,iTemp=0;

				iTemp=ipOriginData[i];
				for (m=i;m>j;m--)
				{
					ipOriginData[m]=ipOriginData[m-1];
				}
				ipOriginData[j]=iTemp;
			}
		}
	}
	/*输出排序后的元素*/
	printf("Insert Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}


void main( )
{
	int iOriginData[10]={3,2,6,7,5,1,0,4,9,8};

	//选择法排序
	SelectSort(iOriginData,10);
	//冒泡(起泡)法排序
	BubbleSort(iOriginData,10);
	//直接插入排序
	InsertSort(iOriginData,10);
	
	return ;
}

你可能感兴趣的:(排序,选择,插入,冒泡)