在这里#include <stdio.h>
#define MAX 8
void display(int a[],int len)
{
for(int i=0;i<len;i++)printf("%d ",a[i]);
printf("\n");
}
void shellsort(int a[],int n)//一趟希尔排序
{
int i,j,temp;
int k=n/2;
for(i=k;i<n;i++)
{
if(a[i]<a[i-k])
{
temp=a[i];
for(j=i-k;a[j]>temp;j-=k)
{
a[j+k]=a[j];
}
a[j+k]=temp;
}
}
}
void bubblesort(int a[],int n)//进行一趟冒泡排序
{
int i,j,temp;
for(i=0;i<n-1;i++)
if(a[i]>a[i+1])
{
temp=a[i];a[i]=a[i+1];a[i+1]=temp;
}
}
void quicksort(int arr[],int low,int high)//一趟快速排序
{
int i = low;
int j = high;
int k = arr[low];
while (i < j)
{
while(i < j && arr[j] >= k) // 从右向左找第一个小于k的数
{
j--;
}
if(i < j)
{
arr[i++] = arr[j];
}
while(i < j && arr[i] < k) // 从左向右找第一个大于等于k的数
{
i++;
}
if(i < j)
{
arr[j--] = arr[i];
}
}
arr[i] = k;
}
//进行一趟堆排序 (未完成)
void swap(int *n,int *m)
{
int *t=n;n=m;m=t;
}
void AdjustDown(int *heap,int size,int root)
{
int parent = root;
int child = parent * 2 + 1;;
while (child < size)
{
if (child+1<size&&heap[child]<heap[child + 1])
{
++child;
}
if (heap[child]>heap[parent])
{
swap(&heap[child], &heap[parent]);
parent = child;
child = parent * 2 + 1;
}
else
{
break;
}
}
}
void sortheap(int *arr, size_t n)
{
for (int i = (n - 2) / 2; i >= 0; --i)
{
AdjustDown(arr,n,i);
}//建堆
for (int i = n-1; i > 0; --i)
{
swap(&arr[0], &arr[i]);
AdjustDown(arr,i,0);
}//开始进行排序
}
int main()
{
printf("请输入待排数列: \n");
int a[MAX],a1[MAX],a2[MAX],a3[MAX],a4[MAX],a5[MAX];
for(int i=0;i<MAX;i++)scanf("%d",&a[i]);
for(int ii=0;ii<MAX;ii++)
a1[ii]=a[ii];
shellsort(a1,MAX);
printf("进行一趟希尔排序结果:\n");
display(a1,MAX);
for(int ii=0;ii<MAX;ii++)
a2[ii]=a[ii];
bubblesort(a2,MAX);
printf("进行一趟冒泡排序结果:\n");
display(a2,MAX);
for(int ii=0;ii<MAX;ii++)
a3[ii]=a[ii];
quicksort(a3,0,MAX-1);
printf("进行一趟快速排序结果:\n");
display(a3,MAX);
for(int ii=0;ii<MAX;ii++)
a4[ii]=a[ii];
sortheap(a4,MAX);
printf("进行一趟堆排序结果: \n");
display(a4,MAX);
return 0;
} 插入代码片
希尔 冒泡 快速 堆排序的第一趟结果
最新推荐文章于 2021-05-27 18:35:38 发布