#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
typedef int keyType;
typedef struct{
keyType key; //关键字码
}RecType;
typedef struct SqList{ //数组结构体
RecType r[MAX_SIZE];
int length;
}SqList;
//输入
SqList write(SqList L){
int i=1;
char x; //判断是否回车
do{
scanf("%d",&L.r[i].key);
L.length=i;
i++;
}while((x=getchar())!='\n');//输入回车键表示停止输入
return L;
}
//打印输出
void output(SqList L){
for(int j=1;j<=L.length;j++){
printf("%d ",L.r[j].key);
}
printf("\n");
}
//直接插入排序
void InsertSort(SqList &S)
{ SqList L=S;
int i,j;
for( i=2; i<=L.length;i++)
{
if(L.r[i].key < L.r[i-1].key)
{
L.r[0] = L.r[i]; //记录第零号位置的数字
L.r[i] = L.r[i-1];
for( j=i-2; (L.r[0].key < L.r[j].key); j--)
L.r[j+1] = L.r[j];
L.r[j+1] = L.r[0];
}
}
//打印
printf("直接插入排序:\n");
output(L);
}
//冒泡排序
void BubbleSort(SqList &S)
{
SqList L=S;
int i,j;
for(i=1;i<L.length;i++)
{
int flag = 1;
for(j=1;j<=L.length-i;j++)
if(L.r[j].key > L.r[j+1].key)
{
flag = 0;
int temp;
temp = L.r[j].key;
L.r[j].key = L.r[j+1].key;
L.r[j+1].key = temp;
}
//若无交换说明已经有序
if(flag==1)
break;
}
//打印
printf("冒泡排序:\n");
output(L);
}
//快速排序主体方法
int Partition(SqList &L,int low,int high)
{
//分割区域函数
L.r[0] = L.r[low];
int pivotkey = L.r[low].key;//一般将顺序表第一个元素作为支点
while(low < high)
{
while(low<high && L.r[high].key>=pivotkey)
high--;
L.r[low] = L.r[high];
while(low<high && L.r[low].key<=pivotkey)
low++;
L.r[high] = L.r[low];
}
L.r[low] = L.r[0];//返回枢轴位置
return low;
}
//递归函数
void QSort(SqList &L,int low,int high)
{
//每张子表的快速排序
if(low<high)
{
int pivotloc = Partition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);
}
}
//快速排序
void quick_Sort(SqList &S){
SqList L=S;
QSort(L,1,L.length);
//打印
printf("快速排序:\n");
output(L);
}
//简单选择排序
void simple_selection_sort(SqList &S)
{
SqList L=S;
int min;
int j;
for (int i = 1; i <L.length; i++)
{ // 选择第i小的记录,并交换
j = i;
min = L.r[i].key;
for (int k = i; k <= L.length; k++)
{ // 在R[i..n-1]中选择最小的记录
if (L.r[k].key < min)
{ min = L.r[k].key ;
j = k;
}
}
if (i != j)
{ // 与第i个记录交换
int temp = L.r[i].key;
L.r[i].key = L.r[j].key;
L.r[j].key = temp;
}
}
//打印
printf("简单选择排序:\n");
output(L);
}
// 22 34 56 67 88 55 3 1
int main(){
SqList S;
S=write(S);
//直接插入排序
InsertSort(S);
//冒泡排序
BubbleSort(S);
//简单选择排序
simple_selection_sort(S);
//快速排序
quick_Sort(S);
system("pause");
return 0;
}
C语言实现排序代码
最新推荐文章于 2022-09-17 09:06:14 发布