#include<stdio.h>
void print(int arr[],int n)
{
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
printf("\n");
}
//直接插入排序
void InsertSort(int arr[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
if(arr[i]<arr[i-1])
{
int t=arr[i];
for(j=i-1;j>=0 && arr[j]>t;j--)
{
arr[j+1]=arr[j];
}
arr[j+1]=t;
}
if(i<6)
print(arr,n);
}
}
//快速排序
void QuickSort(int arr[],int l,int r,int k,int n)
{
if(l<r)
{
int i=l,j=r,x=arr[l];
while(i<j)
{
while(i<j&&arr[j]>=x)
j--;
if(i<j)
arr[i++]=arr[j];
while(i<j&&arr[i]<x)
i++;
if(i<j)
arr[j--]=arr[i];
}
arr[i]=x;
if(k<6)
{
print(arr,n);
k=k+1;
}
QuickSort(arr,l,i-1,k,n);
QuickSort(arr,i+1,r,k,n);
}
}
//選擇排序
void SelectSort(int arr[],int n)
{
int i,j,k;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(arr[k]>arr[j])
k=j;
}
int t=arr[i];
arr[i]=arr[k];
arr[k]=t;
if(i<5)
print(arr,n);
}
}
//堆排序
void swap(int* a, int* b)
{
int t=*b;
*b=*a;
*a=t;
}
void MaxHeapify(int arr[], int start, int end)
{
int dad=start;
int son=dad* 2+1;
while(son<=end)
{
if(son+1<=end&&arr[son]<arr[son+1])
son++;
if (arr[dad] > arr[son])
return;
else
{
swap(&arr[dad],&arr[son]);
dad=son;
son=dad*2+1;
}
}
}
void HeapSort(int arr[], int n)
{
int i;
for(i=n/2-1;i>=0;i--)
MaxHeapify(arr,i,n-1);
for(i=n-1;i>0;i--)
{
swap(&arr[0],&arr[i]);
MaxHeapify(arr,0,i-1);
if(i<6)
print(arr,n);
}
}
int main()
{
int n;
printf("(例arr[8]={0,3,4,6,2,8,5,9})\n請輸入一個不小于5的數:");
scanf("%d",&n);
int arr[100];
printf("請輸入資料:");
for(int i=0;i<n;i++)
scanf("%d",&arr[i]);
printf("排序前:\n");
print(arr,n);
printf("排序的前五趟:\n");
// InsertSort(arr,n);
int k=1;
QuickSort(arr,0,n-1,k,n);
// SelectSort(arr,n);
// HeapSort(arr,n);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245426.html
標籤:C語言
上一篇:求助
下一篇:如何實作多執行緒檢測傳感器的值
