C语言-选择排序(Selection Sort)
1.简单选择排序(Simple Selection Sort)
- 基本思想:
- 算法:
简单选择排序1.0 void SimpleSelectionSort(int *r,int n) { int i,j; int min; for(i=0;i<n;i++) { min=i; for(j=i+1;j<n;j++) { if(r[j]<r[min]) { min=j; } } if(min!=i) { //Swap(r[min],r[i]); } } }
2.升级版:树形选择排序(Tree Selection Sort)
- 算法思想:
3.再升级:堆排序(HeapSort)
- 算法思想:
- 算法:
堆排序1.0(非递归) void heapify(int *r,int k,int end) //k~end为调整的范围 { int i=k; //i为待处理结点 int j=2*i; //j为i的左孩子 int temp; //用于交换的临时存储空间 while(j<=end) { //让指针j选出左、右孩子中较大者 if(j<end&&r[j]<r[j+1]) //"j<end"表示i还有右孩子 ,若右孩子大,则让指针j指向右孩子// { j++; } //根节点与左、右孩子中的较大者 进行比较,进一步筛选出较大者,并将其换到根节点的位置上去 if(r[i]<r[j]) { //Swap(r[i],r[j]); temp=r[i]; r[i]=r[j]; r[j]=temp; } //若发生了,则可能需要对其孩子进行二次调整 i=j; j=2*i; } } void heapSort(int *r,int n) { int k; int temp; //构建堆:由下至上 (由第一个非叶子结点开始) for(k=n/2;k>=1;k--) { heapify(r,k,n); } //调整堆:由上至下 for(k=1;k<n;k++) { //移走堆顶元素 temp=r[1]; r[1]=r[n-k+1]; r[n-k+1]=temp; //调整堆 heapify(r,1,n-k); } }
堆排序2.0(递归)
- 复杂度分析:
参考:
下一篇:
C语言排序算法之选择排序