#define DEBUG
#include "Sort.h"
/***************************************************************************
* 功能:冒泡排序(升序)
* 输入:无
* 输出:无
* 注释:略
***************************************************************************/
void BubbleSort(int *src, int n)
{
int i,j;
int temp,*p;
#ifdef DEBUG
int k,cnt=0;
#endif
p = src;
for (i=0; i<n-1; i++)
{
for (j=i; j<n; j++)
{
if (p[i] > p[j])
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
#ifdef DEBUG
for (k=0; k<n; k++)
printf("%d ",p[k]);
printf("\n");
cnt++;
#endif
}
#ifdef DEBUG
printf("共%d轮\n",cnt);
#endif
}
/***************************************************************************
* 功能:快速排序(升序)
* 输入:无
* 输出:无
* 注释:略
***************************************************************************/
void QuickSort(int *src, int left, int right)
{
int i,j;
int temp,*p;
if (left >= right)
return;
i = left;
j = right;
p = src;
temp = p[left]; //用区间的第一个元素作为基准
while(i < j)
{
while((i<j) && (temp<=p[j]))
j--;
if (i < j)
p[i++] = p[j];
while((i<j) && (temp>p[i]))
i++;
if (i < j)
p[j--] = p[i];
}
p[i] = temp;
QuickSort(p,left,i-1); //对左区间递归排序
QuickSort(p,i+1,right); //对右区间递归排序
}
/***************************************************************************
* 功能:插入排序(升序)
* 输入:无
* 输出:无
* 注释:略
***************************************************************************/
void InsertSort(int *src, int n)
{
int i,j;
int temp,*p;
#ifdef DEBUG
int k,cnt=0;
#endif
p = src;
for (i=1; i<n; i++)
{
if (p[i] < p[i-1])
{
temp = p[i];
for (j=i-1; (j>=0)&&(p[j]>temp); j--)
p[j+1] = p[j];
p[j+1] = temp;
}
#ifdef DEBUG
for (k=0; k<n; k++)
printf("%d ",p[k]);
printf("\n");
cnt++;
#endif
}
#ifdef DEBUG
printf("共%d轮\n",cnt);
#endif
}
/***************************************************************************
* 功能:希尔排序(升序)
* 输入:无
* 输出:无
* 注释:略
***************************************************************************/
void HillSort(int *src, int n)
{
int i,j;
int gap,temp,*p;
#ifdef DEBUG
int k,cnt=0;
#endif
p = src;
for (gap=n/2; gap>0; gap/=2)
{
for (i=gap; i<n; i++)
{
temp = p[i];
for (j=i-gap; (j>=0)&&(p[j]>temp); j-=gap)
p[j+gap] = p[j];
p[j+gap] = temp;
}
#ifdef DEBUG
for (k=0; k<n; k++)
printf("%d ",p[k]);
printf("\n");
cnt++;
#endif
}
#ifdef DEBUG
printf("共%d轮\n",cnt);
#endif
}
排序算法
最新推荐文章于 2024-01-16 05:00:00 发布