- 简单选择排序
1、思想:每一趟从待排序序列中选出最小(或者最大)的数据元素,顺序放在已排好序的最后,直到所有待排序序列都有序。 - 代码实现
#include <iostream> using namespace std; void SelectSort(int *arr,int n)//选择排序 { if(arr == NULL || n<1) { return ; } int minindex = -1; int tmp; int j; for(int i=0; i<n; ++i) { minindex = i; for(j=i+1; j<n; ++j) { if(arr[minindex] > arr[j]) { minindex = j; } } if(j != minindex) { tmp = arr[minindex]; arr[minindex] = arr[i]; arr[i] = tmp; } } } void Printf(int *arr,int len) { if(arr == NULL || len < 1) { return ; } for(int i=0; i<len; ++i) { cout<<arr[i]<<" "; } cout<<endl; } int main() { int arr[] = {6,2,4,0,3}; int len = sizeof(arr)/sizeof(arr[0]); SelectSort(arr,len); Printf(arr,len); return 0; }
- 时间复杂度:O(n^2)(注:最好最坏都是这种情况)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 简单排序的时间复杂度的优化(相当与从1.5n-2n的优化)
思想:每一趟从待排序序列中选择出最小值和最大值,最小值放在左边排序序列后面,最大值放在右边排序序列前面。
代码实现:void SelectSort(int *arr,int len) { if(arr == NULL || len < 1) { return ; } int minindex = -1; int maxindex = -1; int j; for(int left=0,right=len-1; left<right; left++,right--) { minindex = left; maxindex = right; for(j=left; j<=right; ++j) { if(arr[j] > arr[maxindex]) { maxindex = j; } if(arr[j] < arr[minindex]) { minindex = j; } } if(maxindex != right) { int tmp = arr[right]; arr[right] = arr[maxindex]; arr[maxindex] = tmp; } if(minindex != left) { int tmp = arr[left]; arr[left] = arr[minindex]; arr[minindex] = tmp; } } }
简单选择排序
最新推荐文章于 2023-02-20 09:29:31 发布