常用算法-直接选择排序
2011-05-02 21:36
288 查看
直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[2]交换,....,
第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列.
在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=1/2(n*n - n),
总的移动次数 3(n-1).由此可知,直接选择排序的时间复杂度为 O(n2) (n的平方),所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。
由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。
第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列.
在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=1/2(n*n - n),
总的移动次数 3(n-1).由此可知,直接选择排序的时间复杂度为 O(n2) (n的平方),所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。
由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。
#include<iostream> using namespace std; void swap(int &a,int &b) { int temp = a; a = b; b = temp; } void selectSort(int *arr , int size) { for (int i = 0 ; i< size-1 ; i++) { for (int j = i+1 ;j<size ;j++) { if (arr[j]<arr[i]) { swap(arr[i],arr[j]); } } } } int main() { int arr [] ={4,2,3,1,5,2}; selectSort(arr,6); for (int i = 0 ; i<6;i++) { cout<<arr[i]<<endl; } return 0; }
相关文章推荐
- 基础算法-直接选择排序
- 第十六周上机实践—项目1(4)—验证算法 冒泡排序 直接选择排序
- 算法分析-选择排序(直接选择排序 & 堆排序)
- 算法基础之----直接选择排序
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- 常用排序、选择算法
- C语言常用排序——直接插入,冒泡,选择,希尔,快速,堆排序
- 第十六周 验证算法--直接选择排序
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- (第十六周项目1)验证算法(5)直接选择排序
- 第16周项目1-验证算法(5)直接选择排序
- 第十六周项目1-验证算法-直接选择排序
- 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
- C# 常用排序方法 冒泡排序,直接选择排序,直接插入排序
- 白话经典算法系列之四 直接选择排序及交换两个数据的正确实现
- 第十五周项目1-验证算法-直接选择排序
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- Java常用排序算法之直接插入排序
- 常用算法Java实现之直接插入排序