C语言顺序表(引用&)

IDE:Visual Studio 2022

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int Elemtype;

typedef struct {//结构体定义顺序表
	Elemtype data[MAXSIZE];
	int length;
}*Sqlist;
void CreateList(Sqlist &L,int n){//创建顺序表
	int i;
	L = (Sqlist)malloc(sizeof(Sqlist));
	L->length = n;
	printf("输入各元素:\n");
	for (i = 0; i < n; i++)
	{
		scanf("%d", &L->data[i]);
	}
}
void InsertSort(Sqlist &L){//插入排序
	int i,j,temp;
	for (i = 1; i < L->length; i++)
	{
		if(L->data[i]<L->data[i-1])
		{
			temp = L->data[i];
			for (j = i - 1; j >= 0 && L->data[j] > temp; j--)
			{
				L->data[j + 1] = L->data[j];
			}
			L->data[j+1] = temp;
		}
	}
	printf("直接插入排序的结果为:");
	for (i = 0; i < L->length; i++)
	{
		printf("%d ", L->data[i]);
	}
	printf("\n");
}
void BubbleSort(Sqlist &L){//冒泡排序
	int i, j, temp;
	for (i = 0; i < L->length - 1; i++)
	{
		for (j = 0; j < L->length - i - 1; j++)
		{
			if(L->data[j]>L->data[j+1])
			{
				temp = L->data[j];
				L->data[j] = L->data[j + 1];
				L->data[j + 1] = temp;
			}
		}
	}
	printf("冒泡排序的结果为:");
	for (i = 0; i < L->length; i++)
	{
		printf("%d ", L->data[i]);
	}
	printf("\n");
}
void QuickSort(Sqlist& L, int left, int right) {//快速排序
	if (left >= right) return;
	int pivot = L->data[left], i = left, j = right;
	while (i < j) {
		while (i < j && L->data[j] >= pivot) 
		{ 
			j--;
		}
		L->data[i] = L->data[j];
		while (i < j && L->data[i] <= pivot)
		{
			i++;
		}
		L->data[j] = L->data[i];
	}
	L->data[i] = pivot;
	QuickSort(L, left, i - 1);// 对左子数组进行排序
	QuickSort(L, i + 1, right);// 对右子数组进行排序
}
void PrintList(Sqlist &L){//打印顺序表
	int i;
	printf("快速排序的结果为:");
	for (i = 0; i < L->length; i++)
	{
		printf("%d ", L->data[i]);
	}
	printf("\n");
}

主函数

int main()
{
	Sqlist L;
	int n,i,o,flag=1;
	printf("******************\n");
	printf("1.直接插入排序\n");
	printf("2.冒泡排序\n");
	printf("3.快速排序\n");
	printf("按其他键退出\n");
	printf("******************\n");
	while (1) 
	{
		scanf("%d", &o);
		switch (o) 
		{
		case 1:printf("输入顺序表中元素的个数:\n"); scanf("%d", &n); CreateList(L, n); InsertSort(L); break;
		case 2:printf("输入顺序表中元素的个数:\n"); scanf("%d", &n); CreateList(L, n); BubbleSort(L); break;
		case 3:printf("输入顺序表中元素的个数:\n"); scanf("%d", &n); CreateList(L, n); QuickSort(L, 0, n - 1); PrintList(L); break;
		default:flag = 0; break;
		}
		if (flag == 0)break;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值