选择排序
- 1、基本思想
该方法的核心是“选择”,每次在要排序的一组数中先找出最大的(或者最小的)一个数,然后将它和序列中最后一个数(或者第一个数)
进行交换,剩下的数依次进行。 - 2、分类
- 选择排序
- 堆排序
选择排序
- 1、基本思想
这是最基本的选择排序。思想就遵循选择排序的基本思想 - 2、代码实现
(基本实现:)
void SelectSort(int*a,int n)
{
int i = 0;
for(i = 0; i<n; i++)
{
int min = i;
for(int j = i+1; j<n; j++)
{
if(a[min] > a[j])
min = j;
}
std::swap(a[min],a[i]);
}
}
(优化版本:同时选择出最大的和最小的)
void SelectSort(int* a, int n)
{
int left = 0;
int right = n-1;
while(left <= right)
{
int min = left;
int max = right;
for(int i = left; i<=right; i++)
{
if(a[i] <= a[min])
min = i;
if(a[i] >= a[max])
max = i;
}
std::swap(a[max],a[right]);
//注意:这里如果最大的在最小的位置上或者最小的在最大的位置上,那么只用交换一次就可以了
if(min == right)
min = max;
std::swap(a[min],a[left]);
left++;
right--;
}
}
- 3、时间复杂度和空间复杂度
1)时间复杂度
O(N^2)
2)空间复杂度
O(1)
堆排序
这个我在以前的博客中详述过了,这里就不再赘述了,我把链接给大家,如果需要的朋友可以看看。http://blog.youkuaiyun.com/lalu58/article/details/53954465