栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

江西师范大学865数据结构考研排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

江西师范大学865数据结构考研排序

0.结构体
#define MAXSIZE 100
typedef struct{
	int key;
	int other;
}recordtype;
typedef struct{
	recordtype r[MAXSIZE+1];
	int length;
}table;
1.直接插入排序
//无哨兵插入排序
void insertsort(int a[], int n) {
	int i, j, x;
	for (i = 1; i < n; i++) 
	{
		x = a[i];
		j = i - 1;
		while (j >= 0 && a[j] > x) 
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = x;
	}
}

 //有哨兵
void insertsprt2(table* tab)
{
	int i,j;
	for (i = 2; i <= tab->length; i++)
	{
		j = i - 1;
		tab->r[0] = tab->r[i];
		while (tab->r[0].key < tab->r[j].key) 
		{
			tab->r[j + 1] = tab->r[j];
			j = j - 1;
		}
		tab->r[j + 1] = tab->r[0];
	}
}
2.二分插入排序
void binarysort(table* tab)
{
	int i, j, left, right, mid;
	for (i = 2; i <= tab->length; i++)
	{
		tab->r[0] = tab->r[i];  //保存待插入元素
		left = 1; right = i - 1;
		while (left <= right) 
		{
			mid = (left + right) / 2;
			if (tab->r[i].key < tab->r[mid].key)
				right = mid - 1;
			else
				left = mid + 1;		//插入位置是left
		}
		for (j = i - 1; j >= left; j--)
			tab->r[j + 1] = tab->r[j];
		tab->r[left] = tab->r[0];
	}
}
3.shell排序
//Shell排序
void shellinsertsort(table* tab)
{
	int i, j, d;
	d = tab->length / 2;
	while (d >= 1) {
		for (i = d + 1; i <= tab->length; i++);
		{
			tab->r[0] = tab->r[i];	//保存第i个元素
			j = i - d;	//向前找插入位置
			while (j > 0 && tab->r[0].key < tab->r[j].key)
			{
				tab->r[j + d] = tab->[j];
				j = j - d;
			}
			tab->r[j+d] = tab->r[0];
		}
		d / 2;
	}
}

void shellinsertsort(int a[], int length)
{
	int i, j, x, d;
	d = length / 2;
	while (d >= 1) 
	{
		for (i = i + d; i < length; i++)
		{
			x = a[i];
			j = i - d;
			while (x < a[j] && j>=0)
			{
				a[j + d] = a[j];
				j = j - d;
			}
			a[j + d] = x;
		}
		d / 2;
	}
}
4.直接选择排序
void simpleselectsort(table* tab)
{
	int i, j, k;
	for (j = i + 1; j <= tab->length; j++)
	{
		if (tab->r[j].key < tab->r[k].key) k = j;
		if (k != i)
		{
			tab->r[0] = tab->r[k];
			tab->r[k] = tab->r[i];
			tab->r[i] = tab->r[0];
		}
	}
}
5.堆排序(选择排序)
void heapsort(table* tab)
{
	int i;
	for(i=tab->length/2;i>=1;i++)
		shft(tab,i,tab->length);//堆所有元素建堆
	for(i=tab->length/2;i>=2;i--)//i表示当前堆的大小,即等待排序的元素个数
	{
		tab->r[0]=tab->r[i];
		tab->r[i]=tab->r[1];
		tab->r[1]=tab->r[0];
		shft(tab,i,i-1);
	}
}
6.冒泡排序(交换排序)
void bubblesort(table* tab)
{
	int i, j, done;
	i = 1;
	done = 1;
	while (i <= tab->length && done)	//最多进行tab->length次排序
	{
		done = 0;
		for(j=1;j<=tab->length;j++)
			if (tab->r[j + 1].key < tab->r[j].key)
			{
				tab->r[0] = tab->r[j];
				tab->r[j] = tab->r[j + 1];
				tab->r[j + 1] = tab->r[0];
				done = 1;
			}
		i++;
	}
}
7.快速排序(交换排序)
void quicksort(table* tab, int left, int right)
{
	int i, j;
	if (left < right)
	{
		i = left; j = right;
		tab->r[0] = tab->r[i];
		
		do {
			while (tab->r[j].key > tab->r[0].key && i < j) 
				j--;
			if (i < j)
			{
				tab->r[i].key = tab->r[j].key;
				i++;
			}
			while (tab->r[i].key < tab->r[0].key && i < j)
				i++;
			if (i < j)
			{
				tab->r[j].key = tab->r[i].key;
				j--;
			}
		} while (i != j);
		tab->r[i]=tab->r[0];
		quicksort(tab, left, i - 1);
		quicksort(tab, i + 1, right);
	}
}

8.二路归并排序
9.基数排序

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678204.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号