c语言数据结构学习心得——排序
排序:将无序的序列重新排列为有序的序列。
插入类排序
插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列。
直接插入排序:首先以一个元素为有序的序列,然后将后面的元素依次插入到有序的序列中合适的位置直到所有的元素都插入有序序列。
void InsertSort(ElemType A[],int n){ int i,j; for(i=2;i<=n;i++) if(A[i].key<A[i-1].key){ A[0]=A[i]; for(j=i-1;A[0].key<A[j].key;--j) A[j+1]=A[j]; A[i+1]=A[0]; } }
折半插入类排序:操作如折半查找。
希尔排序(缩小增量排序):本质上是插入类排序,只不过是待排序序列分成几个子序列(按照一定增量),再分别对这几个子序列直接插入排序。
优势:每一轮都会使整个序列变得越来越有序,最后一轮当增量为1时,整个序列几乎都是有序的,所以直接进行插入排序会提高排序的效率。但是不稳定。