几种排序的归纳总结(未完待续)
- 选择排序: 选择排序开始的时候,我们扫描整个列表,找到它的最小元素,然后和第一个元素交换,把最小的元素放到它应该放置的位置,同样,我们在剩下的元素中寻找最小的把它放到应处的位置。
伪代码:
for(int i=0;i<=n-2;i++){
min=i;
for(int j=i+1;j<=n-1;j++){
if(A[j]<A[min])
min=j;
}
swap(A[j],A[min]);
}
- 冒泡排序: 比较相邻元素,如果是逆序,就交换他们的位置,重复多次之后,最大的元素就沉降到列表的最后一个位置,第二遍操作将第二大的元素沉下去,一直这么做,到n-1遍以后,列表就已经排好序了
伪代码
for(int i=0;i<=n-2;i){
for(j=0;j<=n-2-i;j++){
if(A[j+1]<A[j])
swap(A[j],A[j+1])
}
}
- 插入排序: 从只有两个元素排序开始,我们要把另外一个数插入到这个有序数组里面去,边排序边插入,知道所有元素都已经到达所处位置,
伪代码
for(int i=1;i<=n-1;i++){
v=A[i]
j=i-1
while(j>=0&&A[j]>v){
A[j+1]=A[j];
j=j-1;
A[j+1]=v;
}
}
- 希尔排序: 希尔排序是一种重要的排序算法,它对一个给定序列的若干长子序列分别应用插入排序。对序列的每一遍操作,都根据一些事先定义好的递减的步长队列h1>h2>…>1来构造要求的子序列。步长必须以1结尾,(对于希尔排序来说,步长队列为121,40,13,4,1的效率应该是最高的)