#include <stdlib.h>
#include <string.h>
#include <stdio.h>
冒泡
void exchange(char *a,char *b)
{
char temp;
temp=*a;
*a=*b;
*b=temp;
}
void printarray(char n[], int len)
{
int i;
printf("output:");
for(i=0;i<len;i++)
printf("%c ",n[i]);
printf("\n");
}
void bubblesort(char n[],char len)
{
int i,j;
for(i=0;i<len-1;i++)
for(j=0;j<len-i-1;j++)
{
if(n[j]>n[j+1])
exchange(&n[j],&n[j+1]);
}
}
/插入
void insertsort(char n[],int len)
{
int i,j,t;
char temp;
for(i=0;i<len;i++)
for(j=0;j<i;j++)
{
if(n[j]>n[i])
{
temp=n[i];
for(t=i;t>j;t--)
n[t]=n[t-1];
n[j]=temp;
}
}
}
///归并
void merge(char n[],int left,int right,int mid)//下标mid的元素属于前一个数组
{
int i=left,j=mid+1,tempindex=0,nindex=left;//nindex=left易错
char *temp=(char *)malloc(right-left+1);
while(i<=mid&&j<=right)//right不是left
{
if(n[i]>n[j])
{
temp[tempindex++]=n[j++];
}
else
{
temp[tempindex++]=n[i++];
}
}
while(i<=mid&&j>right)
{
temp[tempindex++]=n[i++];
}
while(i>mid&&j<=right)
{
temp[tempindex++]=n[j++];
}
tempindex=0;
while(nindex<=right)
{
n[nindex++]=temp[tempindex++];
}
free(temp);//记得释放
}
void mergesort(char n[],int left,int right)
{
if(left==right)
{
return;
}
mergesort(n,left,left+(right-left)/2);
mergesort(n,left+(right-left)/2+1,right);
merge(n,left,right,left+(right-left)/2);
}
///堆排序
int findparent(i)
{
return (i-1)/2;
}
int findleft(int i)
{
return 2*i+1;//乘号
}
int findright(int i)
{
return 2*i+2;
}
void heap_max(char n[],int index,int len)//heap基本操作 将一个新元素插入
{
int temp,left,right;
left=findleft(index);
right=findright(index);
if(left<len&&n[index]<n[left])
{
temp=n[index];
n[index]=n[left];
n[left]=temp;
heap_max(n,left,len);
}
if(right<len&&n[index]<n[right])
{
temp=n[index];
n[index]=n[right];
n[right]=temp;
heap_max(n,right,len);
}
}
void build_heap(char n[],int len)
{
int index;
for(index=len-1;index>=0;index--)
{
heap_max(n,index,len);
}
}
void heap_sort(char n[],int len)
{
if(len>1)
{
int temp;
build_heap(n,len);
temp=n[0];
n[0]=n[len-1];
n[len-1]=temp;
len--;
heap_sort(n,len);
}
}
///快速排序
void quick_sort(char n[], int len)
{
if(len>1)
{
int i=0,j=0;
for(j=0;j<len-1;j++)
{
if(n[j]<n[len-1])
{
exchange(&n[i],&n[j]);
i++;
}
}
exchange(&n[i],&n[len-1]);//记得加取地址
quick_sort(n,i);
quick_sort(n+i+1,len-1-i);
}
}
///
void main()
{
char n[100];
int len;
memset(n,0,sizeof(n[0])*100);
while(1)
{
printf("input array(不超过99个字符+回车):");
if(fgets(n,100,stdin)==NULL)//换行符也要读进来
printf("fgets error\n");
len=strlen(n);
//int len=sizeof(n)/sizeof(n[0]);
//bubblesort(n,len);
//insertsort(n,len);
if(len>0)
{
//mergesort(n,0,len-1);
heap_sort(n,len);
//quick_sort(n,len);
//printarray(n,len);
fputs("output:",stdout);//输出不带'\0'
fputs(n,stdout);
fputs("\n",stdout);
}
else
printf("arraysize ==0!\n");
memset(n,0,sizeof(n[0])*100);
}
}
排序算法
最新推荐文章于 2024-01-16 05:00:00 发布