各种排序方法总结

来源:互联网 发布:淘宝网找工作 编辑:程序博客网 时间:2024/06/03 05:07

排序方法

平均情况

最好情况

最坏情况

辅助空间

稳定性

冒泡排序

O(n2)

O(n)

O(n2)

O(1)

稳定

简单选择排序

O(n2)

O(n2)

O(n2)

O(1)

稳定

直接插入排序

O(n2)

O(n)

O(n2)

O(1)

稳定

希尔排序

O(nlogn)~O(n2)

O(n13)

O(n2)

O(1)

不稳定

堆排序

O(nlogn)

O(nlogn)

O(nlogn)

O(1)

不稳定

归并排序

O(nlogn)

O(nlogn)

O(nlogn)

O(n)

稳定

快速排序

O(nlogn)

O(nlogn)

O(n2)

O(nlogn)~O(n)

不稳定

1.区分选择排序法和冒泡排序法

虽然选择排序法和冒泡排序法都是采用的两个for循环来完成比较,但是核心的思想还是有一些不同的。

先提出两种方法的源代码

冒泡法:

int main(){int i,j,t,a[10];printf("请输入10个数字:\n");for (i=0;i<10;i++){scanf("%5d",&a[i]);}for (i=0;i<10;i++)for (j=0;j<9-i;j++)if (a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("正确的顺序是:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");return 0;}

选择排序算法:

int main(){int i,j,t,a[10];printf("请输入10个数字:\n");for (i=0;i<10;i++){scanf("%5d",&a[i]);}for (i=0;i<10;i++)for (j=i;j<10;j++)if (a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf("正确的顺序是:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");return 0;}

由上面的代码可以看出,冒泡法的思想是从序列的的一个元素开始,将该元素与剩下的元素依次比较。选择排序是将循环中的元素与相邻的下一个元素比较,从而得到正确的序列。

0 0
原创粉丝点击