排序算法之基本排序算法:交换、选择、插入
2014-07-04 10:55
211 查看
//交换排序 /*交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。*/ 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; } } } }
相关文章推荐
- 基本排序算法(选择,冒泡,一般插入,二分插入)源码
- 基本的排序算法(选择、插入、冒泡、希尔、归并、堆、快速)
- 算法学习(一) 基本的排序算法 选择 插入 希尔
- 插入排序是基本排序算法中最好的一种,虽然插入排序也是需要O(N^2)时间,但它比冒泡排序快一倍,比选择排序还要快点。
- java实现最基本的几种排序算法(冒泡,选择,插入)
- 基本排序算法(冒泡、选择、插入)
- 【自考】排序算法-插入、交换、选择、归并排序
- 基本排序算法及分析(一):插入排序,直接选择排序
- 基本排序算法(选择、插入、冒泡)和希尔排序
- 基本排序算法(选择,冒泡,希尔,插入)
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- 五类排序算法(插入,交换,选择,归并)
- 三个简单、基本的排序算法---插入排序、选择排序、冒泡排序
- 选择,交换,插入的基本排序
- 排序算法整理(C++):插入排序、交换排序、选择排序、归并排序
- JavaScript基本排序算法(冒泡、选择、插入)
- 【自考】排序算法-插入、交换、选择、归并排序
- 基本排序算法——选择,插入,冒泡
- 【技术宅2】插入选择冒泡快速交换排序算法
- 基本排序算法(冒泡,快排,插入,希尔,选择,归并)