1、插入排序
#include
#include
#include
int main()
{
int a[10],i,j,t;
srand((unsigned int)time(NULL));
for(i=0;i<10;i++)
a[i]=rand()%100;
printf("排序前序列:n");
for(i=0;i<10;i++)
{
printf("%dt",a[i]);
}
printf("n");
//直接插入排序算法
for(i=1;i<10;i++)
{
if(a[i]=0 && t
2、堆排序
#include
void swap(int arr[], int a, int b){
int tmp;
tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
void heapify(int tree[], int n, int i){
if (i >= n){
return;
}
int max = i;//父节点为最大值
int c1 = 2 * i + 1;
int c2 = 2 * i + 2;
if (c1 < n && tree[c1] > tree[max]){
max = c1;//将较大值的结点下标记录下来
}
if (c2 < n && tree[c2] > tree[max]){
max = c2;//将较大值的结点下标记录下来
}
if (max != i){//如果最大值不是根节点
swap(tree, max, i);//交换tree[max]和tree[i]的值
heapify(tree, n, max);//max就是孩子结点下标
}
}
void build_heapify(int tree[], int n){
int last_node = n - 1;
int parent = (last_node - 1) / 2;
int i;
for (i = parent; i >= 0; i--){
heapify(tree, n, i);
}
}
void heapify_sort(int tree[], int n){
build_heapify(tree, n);
int tmp = tree[0];
for (int i = n - 1; i >= 0; i--){//从最后一个结点开始
swap(tree, i, 0);
heapify(tree, i, 0);
}
}
int main(){
int tree[] = { 11,6,32,99,72,52,15,22};
int n = 8;
printf("原数组为:");
for (int i = 0; i < n; i++){
printf("%d ", tree[i]);
}
printf("n");
heapify_sort(tree, n);
printf("堆排序后的数组为:");
for (int i = 0; i < n; i++){
printf("%d ", tree[i]);
}
printf("n");
return 0;
}