选择排序:最直接的排序算法,每次选择一个最大(最小)的元素放到应该的位置
//选择排序
for(int i=0;i<len;i++)
{
int t = i;
for (int j=i;j<len;j++)
{
if (arr[t] > arr[j])
{
t = j;
}
}
int temp = arr[i];
arr[i] = arr[t];
arr[t] = temp;
}
冒泡排序:每次只能比较相邻的两个元素,如果不合适就交换,适用于只有少量数据,没有顺序的场合
//冒泡1
for (int i=0;i<len;i++)
{
for (int j=0;j < len-1-i; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//冒泡2
bool swap = false;
do
{
swap = false;
for (int i=0;i<len-1;i++)
{
if (arr[i] > arr[i+1])
{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
swap = true;
}
}
} while (swap);
插入排序:首先,将头两个元素排序,然后,依次将每个元素排到正确的位置,直到所有的元素都排完
//插入排序
for(int i=1;i<len;i++)
{
int t = arr[i];
int j;
for (j=i;j>0 && t < arr[j-1];j--)
{
arr[j] = arr[j-1];
}
arr[j] = t;
}
快速排序(n*logn):
1、效率最高的排序算法
2、选出一个分解值,把数组分成两个部分
3、大于等于分解值的元素集中到数组的某部分,小于分解值的元素集中到另一部分
4、对分成的部分分别做同样的操作
void sort(int a[],int low,int high)
{
if (low > high)
{
return ;
}
int first = low;
int last = high;
int key = a[first];
while(first < last)
{
while(first < last && a[last] >= key)
{
last--;
}
a[first] = a[last];
while(first < last && a[first] <=key)
{
first++;
}
a[last] = a[first];
}
a[first] = key;
sort(a,low,first-1);
sort(a,first+1,high);
}