排序——交换排序
来源:互联网 发布:容声冰箱 知乎 编辑:程序博客网 时间:2024/06/01 09:09
1.交换排序算法实现
这里的交换排序指的是冒泡排序和快速排序,
其中快速排序的过程可以简单的理解为:选取序列首元素为枢轴值(pivot),然后分别从序列尾部找到第一个小于pivot的元素(A),从序列首部找到第一个大于pivot的元素(B),然后交换此A,B两元素,直至首尾遍历的两指针重合,一趟排序结束。
以下是这两算法的具体实现:
1 #include<iostream> 2 using namespace std; 3 4 //声明打印辅助函数 5 void printArray(int array[], int length); 6 //声明冒泡排序函数 7 void BubbleSort(int array[], int lenght); 8 //声明分割函数,供快速排序函数调用 9 int Partition(int array[], int low, int high);10 //声明快速排序函数11 void QuickSort(int array[], int low, int high);12 13 int main()14 {15 int array[] = { 12, 3, 6, 4, 27, 9 };16 int length = sizeof(array) / sizeof(*array);17 18 cout << "排序前序列为:" << endl;19 printArray(array, length);20 21 BubbleSort(array, length);22 cout << endl << "冒泡排序后序列为:" << endl;23 printArray(array, length);24 cout << endl;25 26 QuickSort(array, 0, length - 1);27 cout << endl << "快速排序后序列为:" << endl;28 printArray(array, length);29 cout << endl;30 31 cout <<endl;32 system("pause");33 return 0;34 }35 36 void printArray(int array[], int length)37 {38 for (int i = 0; i < length; i++)39 {40 if (i == length - 1)41 cout << array[i];42 else43 cout << array[i] << ",";44 }45 }46 47 void BubbleSort(int array[], int lenght)48 {49 int tmp;50 //标记是否发生了交换51 bool flag;52 for (int i = 0; i < lenght;i++)53 {54 flag = false;55 for (int j = lenght - 1; j >i; j--)56 {57 if (array[j-1]>array[j])58 {59 tmp = array[j - 1];60 array[j - 1] = array[j];61 array[j] = tmp;62 flag = true;63 }64 }65 //一趟排序未发生交换时,表示已经排序已经完成66 if (flag==false)67 {68 return;69 }70 }71 }72 73 int Partition(int array[], int low, int high)74 {75 int pivot = array[low];76 while (low<high)77 {78 while (low < high && array[high] >= pivot) high--;79 array[low] = array[high];80 while (low < high && array[low] <= pivot) low++;81 array[high] = array[low];82 }83 array[low] = pivot;84 return low;85 }86 87 void QuickSort(int array[], int low, int high)88 {89 if (low<high)90 {91 int pivot = Partition(array, low, high);92 QuickSort(array, low, pivot - 1);93 QuickSort(array, pivot + 1, high);94 }95 }
2.关于交换排序的一些结论
(1).为实现快速排序算法,待排序序列宜采用的存储方式为顺序存储。
(2).就平均性能而言,快速排序是目前最好的内部排序算法,但是当要排序的数据已经基本有序时,不宜使用快速排序算法。
(3).快速排序过程构成一棵递归树,递归深度即为递归树的深度,当枢轴值每次将序列等分时,递归树的高为log2n;当枢轴值每次都是子表的最大值或者最小值时,此时递归树退化为单链表,树高为n。
2 0
- 排序——交换排序
- 排序——交换排序
- 交换排序—快速排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——快速排序
- 6.交换排序——冒泡排序
- 7.交换排序——快速排序
- 交换类排序——冒泡排序
- 起泡排序——交换排序
- 排序算法——交换排序
- 交换排序——冒泡排序
- 交换排序——快速排序
- 排序算法浅析——交换排序
- 交换排序——冒泡排序
- 排序算法——交换类排序
- 排序算法——交换排序
- 交换排序——冒泡排序
- Codeforces 707D Persistent Bookcase(离线dfs或在线主席树)
- iOS自定义转场动画
- printf 转义序列和转换字符%
- Fresco 与 Picasso 、Glide 的比较
- React中键盘遮挡输入框
- 排序——交换排序
- 关于main
- Android 使用Google Map API;云计算概念IaaS,PaaS,SaaS,CaaS,MaaS
- prensent一个半透明的viewcontroller 或者push 出一个viewcontroller 做present 动画
- iOS XMPPFramework加入黑名单
- icache的方面以及使用
- java 与 c# 3des 加解密
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
- MySQL子查询