八大排序
性能比较
一、冒泡排序
void bubble(vector<int> &num)
{
for(int i = 0;i<num.size();i++)
for(int j = 0;j<num.size()-1-i;j++)
{
if(num[j]>num[j+1])
{
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
例子:8,9,7,1,0
第一趟排序: 8,9,7,1,0 8,7,9,1,0 8,7,1,9,0 8,7,1,0,9
第二趟排序: 7,8,1,0,9 7,1,8,0,9 7,1,0,8,9
第三趟排序: 1,7,0,8,9 1,0,7,8,9
第四趟排序: 0,1,7,8,9 完成
时间复杂度:
最坏情况:1+2+.....+(n-1)=n(n-1)/2=O()
最好情况:O(n)
二、简单选择排序
void select(vector<int> &num)
{
int min;
for(int i =0;i<num.size();i++)
{
min = i;
for(int j = i;j<num.size();j++)
{
if(num[j]<num[min])
min = j;
}
if(i!=min)
{
int temp = num[min];
num[min] = num[i];
num[i] = temp;
}
}
}
例子:8,9,7,1,0
第一趟排序:0,9,7,1,8
第二趟排序:0,1,7,9,8
第三趟排序:0,1,7,9,8
第四趟排序:0,1,7,8,9 完成
时间复杂度:
比较次数都为:1+2+.....+(n-1)=n(n-1)/2=O()
最好情况交换次数:0
最坏情况交换次数:n-1
时间复杂度最好最坏都为:O()