前言
本篇文章记录了Python与C++的快速排序实现与讲解
以下是本篇文章正文内容,下面案例可供参考
一、选择排序是什么?
选择排序:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ,主要分为"简单选择排序"和"堆排序".
二、什么是简单选择排序?
简单选择排序是指移动元素次数较少的选择排序。
三、算法思想
在待排序表L[1…n]中,每趟在表中选择最小(或最大)的关键字,与i趟-1的元素位置进行交换,然后以此类推,总共需要n-1趟即可完成排序
四、动态演示
五、代码示例
5.1.C++代码示例
//定义一个交换元素的函数swap
void swap(int &a,int &b){
int temp;
temp=a;
a=b;
b=temp;
};
void SelectSort(int A[],int n){
/*************************************************
Function: // SelectSort
Description: // 对数组进行交换排序,时间复杂度为
Calls: // swap
Table Accessed: // None
Table Updated: // None
Input: // A[]-被排序数组
// n -数组长度
Output: // None
Return: // None
Others: // 选择排序
*************************************************/
for (int i = 0; i < n-1; i++) // 遍历n-1趟
{
int min=i; // 记录最小元素的位置
for(int j=i+1;j<n;j++){ // 在A[i,n-1]中获取最小的元素
if(A[j]<A[min]){
min=j; // 更新最小的元素下标
}
}
if(min!=i){
swap(A[i],A[min]); // 交换最小元素
}
}
}
5.2.Python代码示例
def SelectSort(A,reverse=False):
'''
:param A: 被排序数组
:param reverse: 是否倒序
:return: None
'''
n=len(A) #统计数组长度
for i in range(0,n-1):
min =i
for j in range(i+1,n):
if reverse: #输出倒序
if A[j] > A[min]:
min=j
else:
if A[j] < A[min]:
min=j
if min!=i:
A[i],A[min] =A[min],A[i]
六、性能分析
6.1 空间复杂度
空间复杂度=O(1)
6.2 时间复杂度
6.2.1 最坏时间复杂度
O(n2n^2n2)
无论是有序、逆序、乱序,一定需要n-1趟处理
总共需要对比关键字(n-1)+(n-2)…+1=n(n−1)2\frac{n(n-1)}{2}2n(n−1)
元素交换次数<n-1次
6.4 稳定性
简单选择排序是一个不稳定的排序算法
七、链表是否可以实现该算法?
可以实现