无C不行-废物一个-算法导论:C语言
无C不行,废物一个,算法导论:C语言直接插入排序法原理:从无序数列向左遍历,从有序数组向左比较
//插入排序法
void straightsort(int*arr,int len)
{
int temp,i,j;
for(i=1;i<len;i++)//将首元素看成有序数组,i=1表示从第二个元素开始排序
{
temp=arr;//temp存放待插入元素
for(j=i-1;j>=0&&arr>temp;j--)//待插入元素向左比较,arr代表已经排序的有序数组,满足j>=0,且arr>temp
{
arr=arr;//若条件成立,则将已排序数组向右移位,arr最大可达arr处,即temp处
}
arr=temp;//当循环不成立或循环终止,此时arr<=temp(或j=-1,所有有序数组都大于待排元素,)temp应位于arr处,j随temp左移而发生变化(减小)
}
}
归并排序法将一个数组从中间分为两部分,再分别对两部分进行排序(递归),最后将排好序的两部分对比合并
//归并排序法
void merge_sort(float data[],int left,int right,float sorted_data[])
{
if(left<right)//排除原数组出现只有一个数据的情况(left=right)
{
int mid=(left+right)/2;
merge_sort(data,left,mid,sorted_data);
merge_sort(data,min+1,right,sorted_data);
merge_array(data,left,mid,right,sorted_data);
}
}
void merge_array(float data[],int left,int mid,int right,float temp[])//data[]即待排子数组,直接用子数组排序,但将子数组分为两部分,temp[]即临时数组
{
int i=left,j=mid+1;
int k=0;
while(i<=mid&&j<=right)//循环条件,将较小数组放入临时数组temp[]中,同时i变为data或j变为data
{
if(data<=data)
{
temp=data;
}
else
temp=data;
}
while(i<=mid)//以下两个while代表可能出现的特殊情况:i/j所在数组已经全部完成排序,但另一数组仍有>=1的元素未放入临时数组中
temp=data;
while(j<=right)
temp=data;
for(i=0;i<k;i++)//将临时数组中的元素全部放入原数组中,k=right-left,k代表了数组长度
data=temp;
}
void merge_array(float data[],int left,int mid,int right,float temp[])//哨兵简化
{
int max_num=INT_MAX;
int len=right-left+1;
int data_left=new int ;
int data_right=new int ;
int i=0,j=0,k=0;
for(int k=left;k<=mid;k++)
data_left=data;
data_left=max_num;
for(int k=mid+i;k<=right;k++)
data_right=data;
data_right=max_num;
for(int k=0;k<len;k++)
{
if(data_left<=data_right)
data=data_left;
else
data=data_right;
}
}
收藏,必须收藏啊
涂真锦 发表于 2021-11-29 17:54 static/image/common/back.gif
收藏,必须收藏啊
点赞
页:
[1]