各类排序算法

1、插入排序法

1.1、直接插入排序:

#include "stdafx.h"

typedef struct
{
	int key;
	int data;
}Record;

void insertSort(Record r[],int length)
{
	int i,j;
	
	for(i=2;i<=length;i++)   //从第二个数开始到最后一个数
	{
		r[0]=r[i];           //在r[0]中保存插入值r[i]的副本
		j=i-1;
		while(r[j].keyr>[0].key)  //从插入值前一个数开始比较,
		{
			r[j+1]=r[j];          //若大于插入式,则向后移动一位
			j=j-1;                //向前一位再进行比较
		}
		r[j+1]=r[0];             //遇到小于插入值的数,则将插入式插入到该值后面
	}
}

int main(int argc, char* argv[])
{
	int i,j;
	Record r[20];
	int len;
	printf("length:");
	scanf("%d",&len);        //输入整数串长度
	for(i=1;i<=len;i++)
	{
		scanf("%d",&j);      //逐个输入进行排序的整数
		r[i].key=j;
	}
	insertSort(r,len);
	printf("output: \n");
	for(i=1;i<=len;i++)
		printf("%d ",r[i].key);
	printf("\n");
	return 0;
}



 1.2、折半插入排序:

#include "stdafx.h"

typedef struct
{
	int key;
	int data;
}Record;

void BinsertSort(Record r[],int length)
{
	int i,j;
	Record x;
	int low,high,mid;
	
	for(i=2;i<=length;i++)   //从第二个数开始到最后一个数
	{
		x=r[i];
		low=1;high=i-1;      //定义好以排好序的下标
		while(low<=high)
		{
			mid=(low+high)/2; //取出中间元素
			if(x.key<r[mid].key)  //待插入值与中间值比较
				high=mid-1;   //待插入值小于中间值,中间值前一位变为最大值
			else
				low=mid+1;    //待插入值大于中间值,中间值后一位变为最小值

		}
		for(j=i-1;j>=low;j--)  //当找到插入值后,将插入值位置后的每个元素向后移动一位
			r[j+1]=r[j];
		r[low]=x;              //待插入值放入相应位置
	}
}

int main(int argc, char* argv[])
{
	int i,j;
	Record r[20];
	int len;
	printf("length:");
	scanf("%d",&len);        //输入整数串长度
	for(i=1;i<=len;i++)
	{
		scanf("%d",&j);      //逐个输入进行排序的整数
		r[i].key=j;
	}
	BinsertSort(r,len);
	printf("output: \n");
	for(i=1;i<=len;i++)
		printf("%d ",r[i].key);
	printf("\n");
	return 0;
}


2、交换排序法

2.1、冒泡排序

#include "stdafx.h"
typedef struct
{
	int key;
	int data;
}Record;

void BubbleSort(Record r[],int length)
{
	int i,j;
	Record temp;	
	for(i=1;i<=length-1;i++)   //要进行比较的轮数
		for(j=1;j<=length-i;j++)  //每一轮进行的交换的最大次数
			if(r[j].key>r[j+1].key)  //若前面的数大于它后面的数,则这两个数进行交换
			{
				temp=r[j];
				r[j]=r[j+1];
				r[j+1]=temp;
			}
	
}

int main(int argc, char* argv[])
{
	int i,j;
	Record r[20];
	int len;
	printf("length:");
	scanf("%d",&len);        //输入整数串长度
	for(i=1;i<=len;i++)
	{
		scanf("%d",&j);      //逐个输入进行排序的整数
		r[i].key=j;
	}
	BubbleSort(r,len);
	printf("output: \n");
	for(i=1;i<=len;i++)
		printf("%d ",r[i].key);
	printf("\n");
	return 0;
}


2.2、快速排序

 

 

阅读更多
文章标签: 算法 struct output
个人分类: C语言相关
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭