该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面贴出自己写和整理的C语言中的排序算法,希望对大家有帮助。
#include
#include
void InsertSort(int *num);
void print(int *num);
void BinsertSort(int *num);
void ShellSort(int *num, int n);
void popo(int *num, int n);
void swap(int *a, int *b);
int Partition(int *num, int low, int high);
void QuikSort(int *num, int low, int high);
int SelectMinKey(int *num, int i, int n);
void SelectSort(int *num, int n);
void Merge(int *R,int low,int m,int high);
void MergeSort(int R[],int low,int high);
void main()
{
int num[] = {49, 38, 65, 97, 76, 13, 27, 52};
char ch;
printf("num为:");
print(num);
printf("请选择排序的方式:\n");
printf("a:直接插入排序\n");
printf("b:折半插入排序\n");
printf("c:希尔排序\n");
printf("d:冒泡排序\n");
printf("e:快速排序\n");
printf("f:简单选择排序\n");
printf("g:2-路归并排序\n");
printf("请选择:");
ch = getchar();
switch (ch)
{
case 'a':
printf("直接插入排序\n");
InsertSort(num);
break;
case 'b':
printf("折半插入排序\n");
BinsertSort(num);
break;
case 'c':
printf("希尔排序\n");
ShellSort(num, 8);
break;
case 'd':
printf("冒泡排序\n");
popo(num, 8);
break;
case 'e':
printf("快速排序\n");
QuikSort(num, 0, 7);
break;
case 'f':
printf("简单选择排序\n");
SelectSort(num, 8);
break;
case 'g':
printf("2-路归并排序\n");
MergeSort(num, 0, 7);
break;
default:
printf("wrong choice!\n");
break;
}
print(num);
}
//直接插入排序
void InsertSort(int *num)
{
int i = 0, j = 0;
int temp;
for (i=1; i < 8; i++)
{
temp = num[i];
for (j=i-1; j>0; j--)
{
if (num[j] < temp)
break;
num[j+1] = num[j];
}
num[j+1] = temp;
}
}
//输出元素
void print(int *num)
{
for (int i = 0; i < 8; i++)
printf("%d ", num[i]);
printf("\n");
}
//折半插入排序
void BinsertSort(int *num)
{
int i, j;
int low, high, mid;
int temp;
for (i = 1; i < 8; i++)
{
temp = num[i];
low = 0;
high = i-1;
while (low <= high)
{
mid = (low+high)/2;
if (num[mid] >= temp)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
for (j = i; j > high+1; j--)