替换排序算法(冒泡,快速排序)
#include<iostream>
#include<iomanip>
using namespace std;
typedef char KeyType;//自定义需要排序数组类型
//冒泡排序
void bubbleQueue(KeyType R[],int n)
{
int i;
int j;
KeyType temp;
for( i = 0; i < n -1; i++) //总共要进行n-1趟排序
for( j = n -1; j > i; j--) //每一趟比较次数为总趟数n-1减去已经比较过的次数i(i次确定i个元素)
{
if(R[j]<R[j-1])//元素交换
{
temp = R[j];
R[j] = R[j-1];
R[j-1] = temp;
}
}
cout<<"用冒泡排序算法后的序列:"<<endl;
for(i = 0; i < n; i++)
{
cout<<setw(5)<<R[i];//格式输出
}
}
//快速排序对R[s]到R[t]的元素进行排序
void fastQueue(KeyType R[],int s,int t)
{
int i = s;
int j = t;
KeyType temp;
if(s < t)
{
temp = R[s];//每次首元素提出,里出一个位置
while(i != j)
{
while(j > i && R[j] >= temp)//从右往左提出小于首元素的R[j]
j--;
R[i] = R[j];//替换R[i]元素 ,空出位置
while(i < j && R[i] <= temp)//从右往左提出大于于首元素的R[i]
i++;
R[j] = R[i];//替换R[j]元素 ,空出位置
}
R[i] = temp;//最后i=j时,空出的位置用首元素填充
fastQueue(R,s,i-1);//左递归
fastQueue(R,i+1,t);//右递归
}
}
int main()
{
char a[4]={'a','c','b','d'};
bubbleQueue(a,4);
fastQueue(a,0,3);
cout<<"用快速排序算法后的序列:"<<endl;
for(int i = 0; i < 4; i++)
{
cout<<setw(5)<<a[i];
}
return 0;
}
算法分析:
冒泡排序: 快速排序:
时间复杂度:o(Nlog2N) 时间复杂度:o(n^2)
空间复杂度:o(log2N) 空间复杂度:o(1)