文档介绍:数据结构和算法选择排序选择排序分为简单选择排序,堆排序简单选择排序: 从元素中寻找最小的元素,将它和第一位替换,依次类推堆排序首先知道什么是堆,堆是一颗二叉树,是满足什么条件的二叉树呢? 但Ki<=K2i ,Ki<=K2i+1 或者 Ki=>K2i ,Ki=>K2i+1 Eg:对46,79,56,38,40,84 建立一个大顶堆,求初始堆首先建立完全二叉树,插入规则是按层次遍历插入调整二叉树,使其符合堆的规则,一半从 n/2 的元素开始交换排序交换排序分为冒泡排序,快速排序 57685952从小到大排序冒泡排序快速排序快速排序( Quicksort )是对冒泡排序的一种改进。由 在196 2 年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。初始状态{49 38 65 97 76 13 27} 进行一次快速排序之后划分为{27 38 13} 49 {76 97 65} 分别对前后两部分进行快速排序{27 38 13} 经第三步和第四步交换后变成{13 27 38} 完成排序。{76 97 65} 经第三步和第四步交换后变成{65 76 97} 完成排序。// 参照《数据结构》( C 语言版) // 调用: quicksort-->qsort-->partitions int partitions(int a[],int low,int high) { int pivotkey=a[low]; //a[0]=a[low]; while(low<high) { while(low<high && a[high]>=pivotkey) --high; a[low]=a[high]; while(low<high && a[low]<=pivotkey) ++low; a[high]=a[low]; } //a[low]=a[0]; a[low]=pivotkey; return low; } void qsort(int a[],int low,int high) { int pivottag; if(low<high) { // 递归调用 pivottag=partitions(a,low,high); qsort(a,low,pivottag-1); qsort(a,pivottag+1,high); }} void quicksort(int a[],int n) { qsort(a,0,n); } // 简单示例#include <> //#include <> #include "" // 存放于个人函数库中 main() { int i,a[11]={0,11,12,5,6,13,8,9,14,7,10}; for(i=0;i<11;printf("%3d",a[i]),++i); printf("\n"); quicksort(a,10); for(i=0;i<11;printf("%3d",a[i]),++i); printf("\n"); } 归并排序归并排序故名思意就是合并起来在进行排序。他的基本思