最坏情况下,直接插入排序时间复杂度为θ(n²),最小时间代价为θ(n),平均时间代价为θ(n²)
附加存储空间:一个存储单位
稳定性:稳定
原址性:是
紧致性:一个比较,三个赋值操作
特点:对于基本有序,或偶尔有几个在有序位置附近时,效率高,只有直接插入排序和它达到一样的效果;整体效果不如直接插入排序,因为,直接插入排序是将插入位置后的项,直接后移,再插入;而冒泡排序每一步都要进行交换。
算法能够很容易的改进 鸡尾酒排序,组合排序等
#include <iostream>
#include <fstream>
using namespace std;
void BubbleSort(int *arr,int length);
int main()
{
int arr[]={34,65,12,43,67,5,78,10,3,70};
int length=sizeof(arr)/sizeof(int);
cout<<"The orginal array is:"<<endl;
for (int i = 0; i < length; i++)
{
cout<<arr[i ]<<",";
}
cout<<endl;
BubbleSort(arr,length);
for (int i = 0; i < length; i++)
{
cout<<arr[i ]<<",";
}
cout<<endl;
system("pause");
return 0;
}
void BubbleSort(int *arr,int length) //升序排列
{
bool exchange=false; //判断某一行不是否有交换元素
int tmp; //中间变量
for(int i=0;i <length-1;i ++) //Length - 1趟比较
{
for (int j =length-1;j >i ;j --) //第i趟比较
{
if (arr[j ]<arr[j -1]) //交换
{
tmp=arr[j];
arr[j ]=arr[j -1];
arr[j -1]=tmp;
exchange=true; //该趟存在交换
}
}
if (!exchange) //该趟不存在交换,退出,排序完成
return;
}
}
public void ShellSort() //升序排列
{
bool exchange = false; //判断某一行不是否有交换元素
RecType tmp; //中间变量
for (int i = 0; i < Length - 1; i++) //Length - 1趟比较
{
for (int j = Length - 1; j > i; j--) //第i趟比较
{
if (R[j].Key < R[j - 1].Key) //交换
{
tmp = R[j];
R[j] = R[j-1];
R[j - 1] = tmp;
exchange = true; //该趟存在交换
}
}
if (!exchange) //该趟不存在交换,退出,排序完成
return;
}
}