上次三分钟就给大家讲了泡泡排序算法。今天给大家讲了选择性排序算法。仍然只需要三分钟就能快速记住。跟我来!
上动画
给“654321”的六个数字加顺序的流程。
一般流程:
我们将一串要排序的数字分成已排序和待排序(当然,所有初始状态都要排序)。然后,将待排序中的最小值与每次通过的待排序中的第一个元素交换,然后将待排序中的第一个元素分类为已排序。这个过程要进行六次才能完成分拣。
选择排序原则:
(1)在开始时,找到序列中最小(大)的元素,并将其放在序列的起始位置,作为排序后的序列。
继续从剩余的未排序元素中搜索最小(大)的元素,并将其放在排序序列的末尾。
(3)以此类推,直到所有元素都被排序。
选择性排序和冒泡排序的区别:
选择排序是在剩余待排序的数字中找到最小的数字,重新交换;泡泡排序就是看到小的就交换。
选择排序代码:
#包含cstdio
/*交换功能。
*传入:要交换的两个元素的地址*/
void swap(int *x,int * y){ 0
int temp=* x;
* x=* y;
*y=温度;
}
/*递增顺序的选择和排序。
*传入:要排序的数组a,数组元素的数量n */
void selectSort(int a[],int n){ 0
/*进行n次操作*/
for(int I=0;I n;I){ 0
int min _ index=I;//记录待排序部分最小值的下标。
/*扫描要排序的零件,知道下标的最小值*/
for(int j=I;j n;j ) {
if(a[j] a[min_index])
最小索引=j;//随时更新最小下标。
}
swap(a i,a min _ index);//在当前位和要排序的部分之间交换最小值。
}
}
int main(){ 0
int a[]={5,2,3,4,15,16,100,23,88 };
选择排序(a,9);
for(int I=0;I 9;(一)
printf("%d ",a[I]);
//输出结果:2 3 4 5 15 16 23 88 100。
}