Selection sort | Iterative & Recursive
来源:互联网 发布:洛枳扮演者晁然淘宝店 编辑:程序博客网 时间:2024/06/05 18:54
选择排序|迭代和递归
给定整数数组,使用选择排序算法排序。
选择排序是一种不稳定的就地排序算法,因为其简单性已知,并且在某些情况下,特别是在辅助存储器有限的情况下,它具有超过更复杂算法的性能优势。它可以实现为一个稳定的排序。它具有O(n2)时间复杂性,使其在大型列表上使用效率低下。在简单的平均情况O(n2)算法中,选择排序总是优于气泡排序,并且通常比类似的插入排序更差。
使用选择排序的最大优点是我们只需要最大n次交换(内存写入),其中n是输入的长度。另一方面,插入排序采用O(n2)个写入次数。如果存储器写入操作比存储器读取操作显着更昂贵,例如使用闪存,其中每个写入减少存储器的寿命,这可能非常重要。
怎么运行的?
这个想法是将数组分成两个子集 - 排序子列表和未排序的子列表。最初,排序的子列表是空的,未排序的子列表是整个输入列表。算法通过在未排序的子列表中找到最小(或最大,取决于排序顺序)元素,将其与最左边的未排序的元素交换(以排序顺序排列),并将子列表边界移动到右边一个元素。下面的例子解释一下 -
3 5 8 4 1 9 -2i = 0 -2 5 8 4 1 9 3i = 1 -2 1 8 4 5 9 3i = 2 -2 1 3 4 5 9 8i = 3 -2 1 3 4 5 9 8i = 4 -2 1 3 4 5 9 8i = 5 -2 1 3 4 5 8 9
迭代C ++实现 -
#include <iostream>using namespace std; //对arr []执行选择排序 void selectionSort(int arr[], int n){ // run(n - 1)次 for (int i = 0; i < n - 1; i++) { //找到未排序子阵列中的最小元素[i..n-1] //并与arr [i]交换 // and swap it with arr[i] int min = i; for (int j = i + 1; j < n; j++) { //如果arr [j]元素较少,那么它是新的最小值 if (arr[j] < arr[min]) min = j; //更新min元素的索引 } //使用arr [i]交换子阵列[i..n-1]中的最小元素 swap(arr[min], arr[i]); }}//打印数组arr的n个元素的功能void printArray(int arr[], int n){ for (int i = 0; i < n; i++) cout << arr[i] << " ";}// 主功能int main(){ int arr[] = { 3, 5, 8, 4, 1, 9, -2 }; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); printArray(arr, n); return 0;}
输出
-2 1 3 4 5 8 9
递归C ++实现 -
#include <iostream>using namespace std;//递归函数对子阵列arr [i..n-1]执行选择排序subarray arr[i..n-1]void selectionSort(int arr[], int i, int n){ //找到未排序子阵列中的最小元素[i..n-1] //并与arr [i]交换 int min = i; for (int j = i + 1; j < n; j++) { //如果arr [j]元素较少,那么它是新的最小值 if (arr[j] < arr[min]) min = j; //更新min元素的索引 } //使用arr [i]交换子阵列[i..n-1]中的最小元素 互换(arr [min],arr [i]); swap(arr[min], arr[i]); if (i + 1 < n) selectionSort(arr, i + 1, n);}//打印数组arr的n个元素的功能void printArray(int arr[], int n){ for (int i = 0; i < n; i++) cout << arr[i] << " ";}// 主功能int main(){ int arr[] = { 3, 5, 8, 4, 1, 9, -2 }; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, 0, n); printArray(arr, n); return 0;}
输出
-2 1 3 4 5 8 9
选择排序的最差和最佳情况时间复杂度为O(n2)。
使用的辅助空间是O(1)。
阅读全文
0 0
- Selection sort | Iterative & Recursive
- Insertion sort | Iterative & Recursive
- Bubble sort | Iterative & Recursive
- Iterative (non-recursive) Merge Sort
- Iterative (non-recursive) Quick Sort
- topological sort python recursive and iterative
- Iterative Method / Recursive Method
- Invert Binary (recursive and iterative)
- Inorder Tree Traversal | Iterative & Recursive
- Preorder Tree Traversal | Iterative & Recursive
- Postorder Tree Traversal | Iterative & Recursive
- Selection sort
- Selection Sort
- Selection sort
- Selection Sort
- selection sort
- selection sort
- Selection sort
- 【学习笔记】3D图形学:stage3D实战-延迟着色技术DeferredShading
- Struts2(一)
- InfluxDB-Java 对Point类时间属性的扩展
- android常用按钮之ImagetView(三)
- bower install jquery 遇到的问题
- Selection sort | Iterative & Recursive
- ubuntu添加ppa的时候卡在那里不动
- 新博客地址
- 自己实现一个简单的AVL树
- android studio ,gradle 导入项目 常见错误 错误提示:Error:(2, 0) Plugin with id ‘com.github.dcendents.Android-mave
- 使用Jmeter进行接口测试和压力测试的配置和使用
- Redis-AOF持久化
- Codeforces Round #421 A. Mister B and Book Reading
- Web 请求过程