csdn_spider/blog/ds19991999/原创-- 第八章 排序算法.md

211 lines
3.9 KiB
Markdown
Raw Normal View History

2021-02-27 15:01:45 +00:00
# 原创
第八章 排序算法
# 第八章 排序算法
```
#include <stdio.h>
//1.插入排序
void InsetSort(int R[], int n)
{
int i,j,temp;
for(i=1;i<n;++i)
{
//将待插关键字存入temp中
temp=R[i];
j=i-1;
while(j>=0&&temp<R[j])
{
R[j+1]=R[j];
--j;
}
//j+1相当于需要插入的关键字的位置
R[j+1]=temp;
}
}
//2.折半插入排序
//返回有序关键字
int order(int R[], int n)
{
int i;
for(i=0;i<n;++i)
{
if(R[i]>R[i+1])return i;
}
}
void HarfSort(int R[], int n)
{
int i,j,m;
int s,k,temp;
int high;
high = order(R,n);
for(s=high+1;s<n;++s)
{
temp=R[s];//待插关键字
i=0;j=s-1;//需要将temp其中插入的序列
while(i<=j)
{
//有序中间关键字
m=(i+j)/2;
//如果关键字的值小于中间值,则右边等于中间关键字
if(temp<R[m])j=m-1;
else i=m+1;
}
//将元素右移,方便关键字插入
for(k=s-1;k>=m;--k)R[k+1]=R[k];
R[i]=temp; //不知道为什么是i
}
}
//3.起泡排序
void BubbleSort(int R[], int n)
{
int i,j,flag,temp;
for(i=n-1;i>=0;--i)
{
flag=0;
for(j=1;j<=i;++j)
{
if(R[j-1]>R[j])
{
temp=R[j-1];
R[j-1]=R[j] ;
R[j]=temp;
flag=1;
}
}
if(flag==0)return;
}
}
//4.起泡排序2
void BubbleSort2(int R[], int n)
{
int i,temp;
int len = n;
while(len>0)
{
for(i=0;i<n-1;++i)
{
if(R[i]>R[i+1])
{
temp=R[i];
R[i]=R[i+1];
R[i+1]=temp;
}
}
--len;
}
}
//5.快速排序
void QuikSort(int R[], int low, int high)
{
int temp;
int i=low, j=high;
if(low<high)
{
temp=R[low];
while(i<j&&R[j]>=temp)--j;
if(i<j)
{
R[i]=R[j];
++i;
}
while(i<j&&R[i]<temp)++i;
if(i<j)
{
R[j]=R[i];
--j;
}
R[i]=temp;
QuikSort(R,low,i-1);
QuikSort(R,i+1,high);
}
}
//6.简单选择排序
//挑出最小的关键字
void SelectSort(int R[], int n)
{
int i,j,k,temp;
for(i=0;i<n;++i)
{
k=i;
for(j=i+1;j<n;++j)
{
if(R[k]>R[j])
k=j;
}
temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
//7.堆排序
// 完成low到high上的low结点的调整
void Sift(int R[], int low, int high)
{
int i=low,j=2*i+1;
int temp=R[i];
while(j<=high)
{
if(j<high&&R[j]<R[j+1])
++j;
if(temp<R[j])
{
R[i]=R[j];
i=j;
j=2*i+1;
}
else break;
}
R[i]=temp;
}
void HeapSort(int R[], int n)
{
int i;
int temp;
//建立初始堆
for(i<n/2;i>=0;--i)
Sift(R,i,n);
//出栈
for(i=n-1;i>=1;--i)
{
temp=R[0];
R[0]=R[i];
R[i]=temp;
Sift(R,0,i-1);
}
}
//8.测试
int main()
{
int i,len;
int R[10]= {99,6,7,4,5,5,4,8,29,20};
len=sizeof(R)/sizeof(R[0]);
//InsetSort(R, len);
//HarfSort(R,len);
//BubbleSort(R, len);
//BubbleSort2(R,len);
QuikSort(R,0,len-1);
//SelectSort(R,len);
//HeapSort(R,len);
for(i=0;i<len;++i)printf("%d\n",R[i]);
printf("Press enter to continue ...");
getchar();
return 0;
}
```