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;
}