就我目前学习到的知识来说,C语言中最常见的三种排序算法分别是选择、插入、冒泡,下面就这三种算法分别理解分析:
一、选择排序法
算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。
算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。
算法举例:
for(i=0;i<n-1;i++) //外循环控制趟数,n个数选n-1趟
{ k=i; //假设当前趟的第一个数为最值,记在k中 for(j=i+1;j<n;j++) //从下一个数到最后一个数之间找最值 if(a[k]<a[j]) //若其后有比最值更大的 k=j; //则将其下标记在k中 if(k!=i) //若k不为最初的i值,说明在其后找到比其更大的数 { //交换最值和当前序列的第一个数 t=a[k]; a[k]=a; a=t; } } |