C语言排序算法

来源:互联网 发布:13年总决赛格林数据 编辑:程序博客网 时间:2024/05/24 01:17

1.冒泡排序

代码实现:

void BubbleSort(int* pData,int Count){int iTemp;for(int i=1;i<Count;i++){for(int j=Count-1;j>=i;j--){if(pData[j]<pData[j-1]){iTemp = pData[j-1];pData[j-1] = pData[j];pData[j] = iTemp;}}}}

整体思路:

设数组长度为n。

从最后一个数开始,相邻两个数对比,较小的数放在前面,比较n次,使得n个数中最小的一个数被放在了第一位,此后这一个数固定不动;接下来还是从最后一个数开始对比,只比较n-1次,保证后n-1个数中最小的一个数被放在第二位;依次类推,直至排序完成。


2.选择排序

代码实现:

void SelectSort(int* pData,int Count) { int iTemp; int iPos; for(int i=0;i<Count-1;i++) { iTemp = pData[i]; iPos = i; for(int j=i+1;j<Count;j++) { if(pData[j]<iTemp) { iTemp = pData[j]; iPos = j; } } pData[iPos] = pData[i]; pData[i] = iTemp; } }
整体思路:
设数组长度为n。
先从n个数里面找到最小的数,假设是第m1个,将第1个数和第m1个数交换,这样n个数里面最小的数就放在了第一个;接下来再找出后n-1个数中最小的数,假设是第m2个,将第2个数和第m2个数交换;以此类推。

3.选择排序
代码实现:
int SortByIns(int * ListData,int ListLength);{int length = ListLength;int i,j;for(i =1;i< length;i++){int tmpData = ListData[i];j = i-1;while(tmpData < ListData[j]){ListData[j+1]=ListData[j];j=j-1;}ListData[j+1]=tmpData;}return 0;}
整体思路:
如果需要把第i个数插入前面i-1个数构成的数组中(前i-1个数已经从小到大排好序),先将第i个数暂存起来(tmpData),将第i个数与第i-1个数比较,如果第i-1个数较大,则第i-1个数右移,此时第i个数等于第i-1个数;再将第i个数与第i-2个数比较,方法同上,一直比较下去。直到第j个数小于第i个数了,这时就应该将第i个数放在第j个数后面,即第j+1个数(此时第j+1个数和第j+2个数是相等的),至此一轮插入结束。
1 0