快速排序
描述:N个数据,N从键盘上输入。根据N的值,输入N个整形数据,使用交换类算法之快速排序算法,完成N个数据排序,输出排序以后的每一个元素。同时根据输入的数据中是否有相同的数据,判断算法是否是稳定的算法;
输入:输入两行,第一行为一个整数N,N小于100;第二行输入N个数据,数据之间区分一个空格;
输出:输出排序以后的结果,元素之间区分为一个空格;如果为稳定的算法输出 Nf,不稳定算法,输出Inf
输入样例 1
5 45 89 65 32 14
输出样例 1
14 32 45 65 89 Inf
代码:
#include<stdio.h>
void swap(int *a, int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int pa(int arr[], int low, int high)
{
int pi=arr[low];
int i=low+1;
for(int j=low+1;j<=high;j++)
{
if(arr[j]<pi)
{
swap(&arr[j],&arr[i]);
i++;
}
}
swap(&arr[low],&arr[i-1]);
return i-1;
}
void qu(int arr[],int low,int high)
{
if(low<high)
{
int pi=pa(arr,low,high);
qu(arr,low,pi-1);
qu(arr,pi+1,high);
}
}
int in(int arr[],int n,int element)
{
for(int i=0;i<n;i++)
if(arr[i]==element)
return i;
return -1;
}
int is(int arr[], int n, int o[])
{
for(int i=1;i<n;i++)
if (arr[i]==arr[i-1]&&in(arr,n,arr[i])<in(arr,n,arr[i-1]))
return 0;
return 1;
}
int main()
{
int n;
scanf("%d",&n);
int arr[n];
int o[n];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
o[i]=arr[i];
}
qu(arr,0,n-1);
for(int i=0;i<n;i++)
printf("%d ", arr[i]);
printf("\n");
if(is(arr,n,o))
printf("Inf\n");
else
printf("Nf\n");
return 0;
}