【C++】冒泡排序、插入排序、快速排序

时间:2022-11-14 15:29:55
#include<iostream>
using namespace std;
void BubbleSort(int *a,int istart,int len)//冒泡排序
{
//a为数组,len为数组长度,对a[istart]~a[len-1]进行排序,小浮大沉
//从后面往前两两比较,小的上浮,直到最顶端a[istart]中存放的是剩余数组中最小的数。
for(int i=len;i>istart+;i--)
{
if(a[i-]>a[i-])
{
int temp=a[i-];
a[i-]=a[i-];
a[i-]=temp;
}
}
if(istart<len-)BubbleSort(a,istart+,len);
} void InsertionSort(int *a,int ilast,int len)//插入排序
{
//取元素a[ilast+1]插入到a[0]~a[ilast]中,从a[ilast]开始往上一个个比较,如果大小顺序不妥,就对调下它们的数值。
int i=ilast+;
int temp=;
while (a[i]<a[i-])
{
temp=a[i-];
a[i-]=a[i];
a[i]=temp;
i--;
if(i<)break;
}
if(ilast<len-)InsertionSort(a,ilast+,len);
} void QuickSort(int *a,int istart,int ilast)//快速排序
{ //对数组a中从a[istart]~a[ilast]的所有元素进行排序
//1.取第一个数a[istart]做基准,则a[istart]就留出了一个空位置,从后往前找,找到最近一个小于基数的数值(a[j])存入前面的空位置a[i]
//2.从前往后找,找到最近一个大于基数的数值存入a[j],则余出来的空位置又假定为a[i]
//3.当i超过j(即i>=j时)结束该轮排序
//4.重复以上步骤
int BaseNum=a[istart];
int i=istart,j=ilast;
int k=;
while ()
{
while(a[j]>BaseNum && i<j)j--;
a[i]=a[j];
i++;
if (i>=j)
{
a[j]=BaseNum;
k=j;
break;
}
while(a[i]<BaseNum && i<j)i++;
a[j]=a[i];
if (i>=j)
{
a[j]=BaseNum;
k=j;
break;
}
j--;
}
if(istart<k)QuickSort(a,istart,k);
if(k+<ilast)QuickSort(a,k+,ilast);
}
void main()
{
int a[]={,,,,,,,,};
int len=sizeof(a)/sizeof(int);
//BubbleSort(a,0,len);
//InsertionSort(a,0,len);
QuickSort(a,,len-);
for(int i=;i<len;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
} //注:本程序的快速排序虽然基本实现功能,但编写凌乱,留待以后改进