一、实验目的及要求
1.理解排序的概念,及直接插入排序、快速排序算法的思想。
2.在C语言环境中将一个无序序列的数据元素,按照直接插入排序和快速排序的算法分别重新排列成按关键字有序。
二、实验内容
经过对实验目的及要求的分析,本实验包含两个排序算法:直接插入排序、快速排序。分别通过两个函数实现。
1.理解排序的概念,及直接插入排序、快速排序算法的思想。
2.在C语言环境中将一个无序序列的数据元素,按照直接插入排序和快速排序的算法分别重新排列成按关键字有序。
二、实验内容
经过对实验目的及要求的分析,本实验包含两个排序算法:直接插入排序、快速排序。分别通过两个函数实现。
#include<iostream>
#include<cstdio>
using namespace std;
void insert_sort(int *arry,int n)
{
for(int i=0;i<n;i++)//枚举每一个数字
{
for(int j=i;j>0&&arry[j-1]>arry[j];j--)//不断移动插入前面已经排好的数据
{
swap(arry[j-1],arry[j]);
}
}
}
void out(int a[], int n)
{
for(int i = 0 ; i < n ; ++ i)
{
printf("%5d", a[i]);
}
}
int partion(int a[],int p,int r)
{
int e = (r + p)/2;
swap(a[e],a[r]);
int x=a[r], i=p-1;
for (int j=p;j<r;j++)
{
if (a[j]<=x)
{
swap(a[i+1],a[j]);
i++;
}
}
swap(a[r],a[i+1]);
return i+1;
}
void QuickSort(int a[],int p,int r){
if (p<r){
int q=partion(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int main()
{
freopen("in","r",stdin);
//freopen("out","w",stdout);
int a[1010];
int n; scanf("%d",&n);
for(int i = 0 ; i < n ; ++ i)
{
scanf("%d", a+i);
}
printf("选择排序前:");
out(a,n);
insert_sort(a, n);
printf("\n选择排序后:");
out(a,n);
scanf("%d",&n);
for(int i = 0 ; i < n ; ++ i)
{
scanf("%d", a+i);
}
printf("\n快速排序前:");
out(a,n);
QuickSort(a,0,n-1);
printf("\n快速排序后:");
out(a,n);
return 0;
}
三、实验结果