1. 冒泡排序
- 时间复杂度O(n2)
- 空间复杂度O(1)
算法的基本思想:
- 相邻元素交换,一共n-1轮,每轮交换n-1-i个元素
C++实现:
- int* bubbleSort(int* A, int n) {
{
for(int j=0;j<n-1-i;j++)
{
if(A[j]>A[j+1])
swap(A[j],A[j+1]);
}
}
return A;
}
2. 选择排序
- 时间复杂度O(n2)
- 空间复杂度O(1)
算法的基本思想:
- 将元素分为待排序与已排序两类。每次从待排序的元素中选择最小的一个元素插入到待排序元素的最后,需要选择n-1次。
C++实现:
- int* selectionSort(int* A, int n) {
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(A[j]<A[min])
min=j;
}
swap(A[min],A[i]);
}
return A;
}
3. 插入排序
- 时间复杂度O(n2)
- 空间复杂度O(1)
算法的基本思想:
- 将元素分为待排序与已排序两类。默认将第一个元素放入已排序类中,从第二个元素开始遍历,将所取的当前值与已排序的元素进行比较。比较的方法为从后向前比较,若该已排序元素的值不小于当前值,则将该已排序元素的位置+1,否则插入当前值到已排序类中。
C++实现:
- int* insertionSort(int* A, int n) {
for(int i=1;i<n;i++)
{
int get=A[i];
int j=i-1;
while(j>=0&&A[j]>=get)
{
A[j+1]=A[j];
j--;
}
A[j+1]=get;
}
return A;
}