原文转自:http://blog.csdn.net/morewindows/article/details/6657829
1:算法分析中比较经典的当属于排序算法,最早接触的是选择排序和冒泡排序;但是这两种算法的效率都不是很高,通过计算可以得知时间复杂度都为O(n的平方)
冒泡排序非常容易理解和实现的;
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
void Bubblesort_1(int a[],int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
上述算法的缺点就是,如果一个数组已经有序,仍然需要这么多的比较计算,因此可以做如下改进:
void Bubblesort_2(int a[],int n)
{
int i,j,temp;
bool flag=1;
i=n;
while(flag)
{
flag=false;
for(j=0;j<i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
}
i--;
}
}
选择排序的原理也十分简单,就是现在a[0]~a[n-1]找到最小值然后与a[0]交换,然后在进行一次排序在a[1]~a[n-1]找到最小值与a[1]交换,直到排序完成; 代码如下:
void Select_sort(int a[],int n)
{
int i,j;
int m;
int temp;
for(i=0;i<n-1;i++)
{
m=i;
for(j=i+1;j<n;j++)
{
if(a[m]>a[j])
{
temp=a[j];
a[j]=a[m];
a[m]=temp;
}
}
}
}