1、冒泡法
4 3 2 1
复杂度O(n*n);
一共要进行3次遍历,即(n-1)次;
每次遍历需要(n - 1 - i)次;
冒泡排序是稳定的排序。
#include <iostream>
using namespace std;
void bubble_sort(int a[], int n)
{
int loop_times = 0;
int changes = 0;
for(int i = 0; i < n - 1; i++)
{
for(int j = 0; j < n - i - 1; j++)
{
if(a[j] > a[j+1])
{
swap(a[j], a[j+1]);
changes = 1;
}
loop_times++;
}
if(changes == 0)
{
break;
}
}
cout<<"loops = "<<loop_times<<endl;
}
2、快速排序。
快速排序是一种不稳定的排序算法。
void QuickSort(int a[], int head, int tail)
{
int left = head;
int right = tail;
int key = a[left];
if(head >= tail)
{
return;
}
while(left < right)
{
while(left < right && a[right] >= key)right--;
a[left] = a[right];
while(left < right && a[left] <= key)left++;
a[right] = a[left];
}
a[left] = key;
QuickSort(a, head, left - 1);
QuickSort(a, left + 1, tail);
}