您的位置:首页 > 理论基础 > 数据结构算法

数据结构——基本排序汇总

2013-11-02 22:02 435 查看
#include <stdio.h>

#define N 100

void print1(int a[], int len)
{
int i;

for(i = 0; i < len; i++)
{
printf("%d ", a[i]);
}

printf("\n");

}

void print2(int a[], int len)
{
int i;

for(i = 1; i <= len; i++)
{
printf("%d ", a[i]);
}

printf("\n");

}

int Swap(int *a, int *b)
{

int temp;

temp = *a;
*a = *b;
*b = temp;

return 0;
}

int InsertSort(int a[], int len)
{
int i, j;

for(i = 1; i < len; i++)
{
for(j = i - 1; j >= 0; j--)
{
if(a[j] > a[j + 1])
{
Swap(&a[j], &a[j + 1]);
}
}
}

return 0;
}

int ShellSort(int a[], int len)
{
int i, j, dt;

for(dt = len / 2; dt > 0; dt = dt / 2)
{
for(i = dt; i < len; i++)
{
for(j = i - dt; j >= 0; j -= dt)
{
if(a[j] > a[j + dt])
{
Swap(&a[j], &a[j + dt]);
}
}
}
}

return 0;
}

int SelectSort(int a[], int len)
{
int i, j, min;

for(i = 0; i < len; i++)
{
min = i;

for(j = i + 1; j < len; j++)
{
if(a[min] > a[j])
{
min = j;
}
}

Swap(&a[min], &a[i]);
}

return 0;
}

int HeapModify(int a[], int i, int len)
{
int temp = i;
int lchild = 2 * i;
int rchild = 2 * i + 1;

if(a[lchild] > a[temp] && lchild < len)
{
temp = lchild;
}

if(a[rchild] > a[temp] && rchild < len)
{
temp = rchild;
}

if(temp != i)
{
Swap(&a[temp], &a[i]);
HeapModify(a, temp, len);
}

return 0;
}

int HeapSort(int a[], int len)
{
int i;

for(i = len / 2 - 1; i >= 0; i--)
{
HeapModify(a, i, len);
}

for(i = len - 1; i > 0; i--)
{
Swap(&a[0], &a[i]);
HeapModify(a, 0, i);

printf("中间过程:");
print1(a, len);

}

return 0;
}

int partition(int a[], int low, int high)
{

int privot = a[low];

while(low < high)
{
while(low < high && a[high] > privot)
{
high--;
}

if(low < high)
{
a[low++] = a[high];
}

while(low < high && a[low] < privot)
{
low++;
}

if(low < high)
{
a[high--] = a[low];
}

}

a[low] = privot;

return low;
}

int QuickSort(int a[], int low, int high)
{
int privot;

if(low < high)
{
privot = partition(a, low, high);
QuickSort(a, low, privot - 1);
QuickSort(a, privot + 1, high);
}

return 0;
}

void main()
{
int a
;;
int i;
int len;

printf("请输入需要排序的数字个数:\n");
scanf("%d", &len);

printf("请输入排序的数值:\n");
for(i = 0; i < len; i++)
{
scanf("%d", &a[i]);
}

printf("排序开始:\n");
printf("before:");
print1(a, len);

//    InsertSort(a, num);
//    ShellSort(a, num);
//    SelectSort(a, num);
//    HeapSort(a, len);
QuickSort(a, 0, len - 1);

printf("排序完成:\n");
printf("after:");
print1(a, len);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: