排序算法之基本排序算法:交换、选择、插入

来源:互联网 发布:石家庄网站排名优化 编辑:程序博客网 时间:2024/04/20 02:46


//交换排序/*交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。*/void ExchangeSort(int *pData,int count){int temp;for(int i=0;i<count-1;i++){for(int j=i+1;j<count;j++){if(pData[j]<pData[i])//if(pData[i]>pData[j]){temp = pData[i];pData[i] = pData[j];pData[j] = temp;}}}}//选择排序/*思想,这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从剩下的部分中选择最小的与第二个交换,这样往复下去。*/void SelectSort(int *pData,int count){int temp,ipos;for(int i=0;i<count-1;i++){temp = pData[i];ipos = i;for(int j=i+1;j<count;j++)   //在后半部分无序数组中选择出最小的{if(pData[j]<temp){temp = pData[j];ipos = j;}}pData[ipos] = pData[i];   //将选出的最小的放到前半部分有序数组最后pData[i] = temp;}}//插入排序/*插入法较为复杂,它的基本工作原理是抽出牌,在前面的牌中寻找相应的位置插入,然后继续下一张*/void InsertSort(int *pData,int count){int i, j;int temp;for(i=1;i<count;i++){temp = pData[i];for(j=i;j>0 && pData[j-1]>temp;j--){pData[j] = pData[j-1];}pData[j] = temp;}/*for(int i=1;i<count;i++){int temp = pData[i];   //保存要插入的数字int ipos = i-1;   //待插入数组(有序)的长度while(ipos>=0 && temp<pData[ipos])   //插入到有序数组{pData[ipos+1] = pData[ipos];   //后移ipos--;}pData[ipos+1] = temp;   //插入}*/}//冒泡排序/*这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡*/void BubbleSort(int *pData,int count){//排序,升序int temp;for(int i=0;i<count;i++){for(int j=count-1;j>i;j--)   //只能是[count,i),不可以[i,count-1){if(pData[j]<pData[j-1]){temp = pData[j];pData[j] = pData[j-1];pData[j-1] = temp;}}}}


0 0