交换排序
来源:互联网 发布:软件设计师官网 编辑:程序博客网 时间:2024/04/30 10:40
交换排序的基本思想:
两两比较待排序元素,发现倒序则交换。
交换排序包括:
(1)冒泡排序
(2)快速排序
关于交换排序算法的时间复杂度和稳定性请见该博文:http://blog.csdn.net/learn_sunzhuli/article/details/47068295
算法由C++实现的代码如下,已经在 vs2010上测试通过:
#include <iostream>using namespace std;void BubbleSort(int arr[], int len){ bool isFinished; //添加标志位,判断排序是否提前结束 for(int i = 0; i < len; i++) { isFinished = true; for(int j = 0; j < len - i - 1; j++) { if(arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); isFinished = false; } } if(isFinished) return; }}//cutPoint为引用型变量,因为它的改变值要返回给QuickSort()函数中的实参void GetCutpoint(int arr[], int startPoint, int endPoint, int& cutPoint)//引用型参数{ int front = startPoint; int rear = endPoint; int currentValue = arr[front];//空出一个位置 while(front != rear) { //考虑极端情况,即原序列已经有序、 //思考 front < rear 该判断条件的意义 while(front < rear && arr[rear] > currentValue) rear--; if(front < rear) { arr[front] = arr[rear];//空出一个位置 front++; } while(front < rear && arr[front] < currentValue) front++; if(front < rear) { arr[rear] = arr[front]; rear--; } } arr[front] = currentValue; cutPoint = front;}void QuickSort(int arr[], int startPoint, int endPoint)//递归排序{ int cutpoint; if(startPoint < endPoint) { GetCutpoint(arr, startPoint, endPoint, cutpoint); QuickSort(arr, startPoint, cutpoint - 1);//arr[cutpoint]位置已经确定,不再参与排序 QuickSort(arr, cutpoint + 1, endPoint); }}int _tmain(int argc, _TCHAR* argv[]){ int arr[] = {1, 3, 5, 6, 9, 8, 7, 2, 4, 0}; int len = sizeof(arr) / sizeof(arr[0]); //BubbleSort(arr, len); QuickSort(arr, 0, len - 1); //输出排序后结果 for(int i = 0; i < len; i++) cout<<arr[i]<<" "; cout<<endl; return 0;}
排序后,数组元素按照从小到大顺序依次输出,由于数组元素已经明确给出,则不在给出排序结果截图。
0 0
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- 交换排序
- The Exchange of Items (141 - ZOJ Monthly, July 2015 - E 最小费用最大流)
- Native library not found! Please copy ibbdpush_v2_3.so into your project!
- oracle 创建表性别字段取'男'或者'女',默认为'男'
- 嵌入式系统基础知识------之嵌入式系统的性能评价(1.5 )
- [Cocoa]_[初级]_[NSButton之改变title标题的颜色]
- 交换排序
- JavaScript 基础 二
- Ubuntu下adb安装
- linux中的file命令简介
- HDFS SnapShot学习
- LeetCode(61) Rotate List
- Scala并发编程react、loop代码实战详解
- HTML5基础05----HTML5格式化及使用
- UML类图简介