简单的快速排序
1、是一种运用递归思想并且应用交换作为工具的一种排序算法。
2、时间复杂度在不同的情况下不同,最好情况nlog(n),最差情况n^2。(一般平均的情况下为nlog(n))
(u.txt 中的范例5 3 1 4 9 2)
#include<bits/stdc++.h>
using namespace std;
void Qsort(int a[],int l,int r){
if (l<r)
{
int standard = a[r]; //选取standard即中间的标准的时候可进行优化。
int num = l-1;
int tem;
for (int i = l; i < r; ++i)
{
if (standard >= a[i])
{
num++; //交换
tem = a[i];
a[i] = a[num];
a[num] = tem;
}
}
tem = a[num+1];
a[num+1] = a[r];
a[r] = tem;
int mid = num+1;
Qsort(a,l,mid-1);
Qsort(a,mid+1,r);
}
}
int main(int argc, char const *argv[])
{
freopen("u.txt","r",stdin);
int a[10050];
int size,l,r; // l r 为传入快排递归函数的区间的左右断电
cin>>size;
r = size-1;
l = 0;
for (int i = 0; i <size; ++i)
{
cin>>a[i];
}
Qsort(a,l,r);
for (int i = 0; i < size; ++i)
{
cout<<a[i]<<" ";
}
return 0;
}
冒泡排序
1、一种运用交换做为工具的排序算法。
2、时间复杂度在最好的情况下是O(n),但一般平均情况下是O(n^2)
#include<bits/stdc++.h>
using namespace std;
void Bsort(int a[],int size){
for(int i=0;i<size;i++){
for(int j=1;j<size-i;j++){
if(a[j-1] > a[j]){
int tem;
tem = a[j-1];
a[j-1]=a[j];
a[j] = tem;
}
}
}
}
void Qsort(int a[],int l,int r){ // 1 到 length-1
if (l<r)
{
int standard = a[r];
int num = l-1;
int tem;
for (int i = l; i < r; ++i)
{
if (standard >= a[i])
{
num++; //交换
tem = a[i];
a[i] = a[num];
a[num] = tem;
}
}
tem = a[num+1];
a[num+1] = a[r];
a[r] = tem;
int mid = num+1;
Qsort(a,l,mid-1);
Qsort(a,mid+1,r);
}
}
int main(int argc, char const *argv[])
{
freopen("u.txt","r",stdin);
int a[10050];
int size,l,r; // l r 为传入快排递归函数的区间的左右断电
cin>>size;
r = size-1;
l = 0;
for (int i = 0; i <size; ++i)
{
cin>>a[i];
}
// Qsort(a,l,r);
Bsort(a,size);
for (int i = 0; i < size; ++i)
{
cout<<a[i]<<" ";
}
return 0;
}
冒泡排序与快速排序
个人理解认为快速排序是冒泡排序的一种优化,利用递归进行时间复杂度的优化。