1:冒泡排序
n次扫描,从后往前扫,当后一个比前一个小时,即交换,也就是小的往上冒。第一次就找到了最小的冒到了第一个,然后在除了第一个的剩下的所有数里面找第二小(剩下的里面是最大的),这样,经过n次查找就能是序列有序
代码:
void Bubblesort(int a[],int sz)
{
for(int i=0; i<sz-1; i++)
{
for(int j=sz-1; j>i; j--)
{
if(a[j]<a[j-1])
swap(a[j],a[j-1]);
}
}
for(int i=0; i<11; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
2 快速排序
快速排序的核心思想就是随便选择一个数作为基准,然后讲剩下的所有的数中比他小的放在他的左边,把比他大的放在他的右边,然后对左右两边继续进行分割,直至完成排序
代码:
void Quicksort(int a[],int left,int right)
{
if(left<right)
{
int i=left;
int j=right;
int sentry=a[left];
while(i<j)
{
while(i<j&&a[j]>=sentry)
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<sentry)
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=sentry;
Quicksort(a,left,i-1);
Quicksort(a,i+1,right);
}
}
时间复杂度:对于冒泡排序,总的时间复杂度为n*n,但是对于快速排序最差的情况是n*n,但是大部分还是n*logn,所以平均复杂度大约为n*logn;