头文件
typedef struct list
{
intarray[100]; //顺序表的排序
intsize;
}SqList;
主文件
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "list.h"
SqList * create() //创建待排序序列的存储结构,为直接插入排序准备
{
inti,n;
SqList*L;
L=(SqList*)malloc(sizeof(SqList));
printf("输入N个元素\n");
scanf("%d",&n);
for(i=1;i<=n;i++) //0的位置空着以便直插法设置监察哨
{
scanf("%d",&L->array[i]);
}
L->size=n;
returnL;
}
直接插入排序
void insertSort(SqList *l)
{
inti,j;
for(i=2;i<=l->size;i++)
{
if(l->array[i]<l->array[i-1]) //比有序序列最大的一个小才移动
{
l->array[0]=l->array[i]; //[0]为检查哨
for(j=i-1;l->array[j]>l->array[0];j--) //如果插入的值a小于正在比较的的值b,那么b往后移动一次,指示器j--以便与b的前一个比较
{
l->array[j+1]=l->array[j];
}
l->array[j+1]=l->array[0]; //a比b大 所以把a插入
}
}
}
冒泡排序
void bubbleSort(SqList *l)
{
inti,j,temp;
for(i=0;i<l->size;i++)
{
for(j=1;j<=l->size-1;j++)
{
if(l->array[j]>l->array[j+1])
{
temp=l->array[j];
l->array[j]=l->array[j+1];
l->array[j+1]=temp;
}
}
}
}
快速排序的一趟划分
int partition(SqList *p, int low,int high)
{
intkey;
key=p->array[low];
while(low<high)
{
while(low<high&&p->array[high]>=key)
{
high--;
}
p->array[low]=p->array[high];
while(low<high&&p->array[low]<=key)
{
low++;
}
p->array[low]=p->array[high];
}
p->array[low]=key;
returnlow;
}
快速排序
void quickSort(SqList *l, int low,int high)
{
intpivot;
if(low<high)
{
pivot=partition(l,low,high);
quickSort(l,low,pivot-1);
quickSort(l,pivot+1,high);
}
}
选择排序
void selectSort(SqList *l)
{
inti,j,small;
inttemp;
for(i=1;i<l->size;i++) //n-1次
{
small=i;
for(j=i+1;j<=l->size;j++)
{
if(l->array[j]<l->array[small])
{
small=j;
}
}
if(small!=i)
{
temp=l->array[small];
l->array[small]=l->array[i];
l->array[i]=temp;
}
}
}
显示排序结果
void display(SqList *l)
{
inti;e
for(i=1;i<=l->size;i++)
{
printf("%d",l->array[i]);
}
}
void main()
{
SqList*L;
L=create();
bubbleSort(L);
printf("冒泡排序\n");
display(L);
insertSort(L);
printf("直接插入排序\n");
display(L);
quickSort(L,1,L->size);
printf("快速排序\n");
display(L);
selectSort(L);
printf("选择排序\n");
display(L);
}