数据结构c实验十二 排序

实验十二 排序

1、实验目的:
理解常见的排序算法。
2、实验环境与设备:
已安装Visual Studio 2010(或其以上版本)集成开发环境的计算机。
3、实验原理:
常见排序算法的排序思想及其实现。
4、实验内容:
设计相应算法,分别统计直接插入排序、起泡排序、简单选择排序3种排序算法执行过程中需要进行的关键字比较和记录移动次数。注:上述算法实现时可以把元素类型均简化为int型。如待排序列为:
{49,38,65,97,76,13,27,49}
(另外3种排序算法:希尔排序、快速、归并排序的比较和移动次数统计作为选作内容。)。
5、实验考核:
(1)完成纸质版实验报告
(2)提交电子版作业

6、执行结果示例如下:
在这里插入图片描述
源代码

#include<stdio.h>
//#include<stdlib.h>
int  count = 0;  

void swap(int *a, int *b)
{
	count++;  
	int tempt = *a;
	*a = *b;
	*b = tempt;

}
////方法3.插入排序
int InsertionSort(int *arr, int n)
{
	int PreIndex, current, i, j, num;
	num = 0;
	for (i = 1; i < n; i++)
	{
		num++;
		if (arr[i] < arr[i - 1])
		{
			int tempt = arr[i];  
			for (j = i - 1; j >= 0 && arr[j] > tempt; j--)
			{
				num++; count++;
				arr[j + 1] = arr[j];
			}
			arr[j + 1] = tempt;
			count += 2; 
		}
		if (i >= 1) {
			printf("第 i = %d 趟排序后:", i + 1);
			for (j = 0; j < n; j++)printf("%d ", arr[j]);
			puts("");
		}
	}
	return num;
}

////方法1.冒泡排序
int  BubbleSort(int *arr, int n)
{

	int i, j, num, k;
	num = 0;
	for (i = n - 1; i > 1; i--)
	{
		for (j = 0; j < i; j++) {
			num++;
			if (arr[j] > arr[j + 1])
			{
				swap(&arr[j], &arr[j + 1]);
			}
		}
		printf("第 i = %d 趟排序后:", n - i);
		for (k = 0; k < n; k++)printf("%d ", arr[k]);
		puts("");

	}

	return num;
}


////方法2.选择排序
int  SelectionSort(int *arr, int n)
{
	int MinIndex, i, j, num, k;
	num = 0;
	for (i = 0; i < n - 1; i++)
	{
		MinIndex = i;
		for (j = i + 1; j < n; j++) {
			num++;
			if (arr[j] < arr[MinIndex])MinIndex = j;
		}
		swap(&arr[i], &arr[MinIndex]);
		printf("第 i = %d 趟排序后:", i + 1);
		for (k = 0; k < n; k++)printf("%d ", arr[k]);
		puts("");

	}
	return num;
}


void PlayInsertSort(int *arr, int len)
{

	int i;
	printf("直接插入排序:\n");
	int num = InsertionSort(arr, len);
	printf("排序后:");
	for (i = 0; i < len; i++)printf("%d ", arr[i]);
	puts("");
	printf("比较次数:%d,移动次数:%d\n", num, count);//count为全局变量 
}


void PlayBubbleSort(int *arr, int  len)
{
	int i;
	printf("起泡排序:\n");
	int num = BubbleSort(arr, len);
	printf("排序后:");
	for (i = 0; i < len; i++)printf("%d ", arr[i]);
	puts("");
	printf("比较次数:%d,移动次数:%d\n", num, count * 3); //count为全局变量,记得乘三 
}


void PlaySelectionSort(int *arr, int len)
{
	int i;
	printf("选择排序:\n");
	int num = SelectionSort(arr, len);
	printf("排序后:");
	for (i = 0; i < len; i++)printf("%d ", arr[i]);
	puts("");
	printf("比较次数:%d,移动次数:%d\n", num, count * 3);  
}



int main()
{
	int i;
	int arr[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
	int len = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < len; i++)printf("%d ", arr[i]);
	puts("");
	PlayInsertSort(arr, len);
	count = 0;
	printf("*********************************************\n");
	int arr1[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
	PlayBubbleSort(arr1, len);
	count = 0;
	printf("*********************************************\n");
	int arr2[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
	PlaySelectionSort(arr2, len);

	system("pause");

	return 0;
}

在这里插入图片描述

发布了15 篇原创文章 · 获赞 0 · 访问量 240

猜你喜欢

转载自blog.csdn.net/qq_44796882/article/details/105464912
今日推荐