排序
1.简单排序
在数组规模较小时常使用,代码简单
Sort1
For(int i = 0; i <n; i++)
{
For(int j = i; j > 0&&x[j-1] > x[j]; j--)
{
Swap(x[j-1], x[j]);
}
}
改进1:内联展开swap函数
改进2:保存x[i]
Sort2
For(int i = 0; i <n; i++)
{
t = x[i];
For(int j = i; j > 0&&x[j-1] > x[j]; j--)
{
X[j] = x[j-1];
}
X[j] = t;
}
2.简单快速排序
使用分治法达到排序目的,将每一个元素放到最终位置,然后将数组分成两部分,递归排序。
选择第一个元素作为基准,直接从左到右遍历
void qsort1(l, u)
{
int (l>=u)
return;
m = l;
for(int i = l+1; i <= u; i++)
if(x[i] < x[l])
swap(x[++m], x[i]);
swap(x[l], x[m]);
qsort(l, m-1);
qsort(m+1, u);
}
元素都相同,代码改进,双向排序
void qsort2(l, u)
{
if (l >= u)
return;
t = x[l]; i = l; j = u+1;
while(1)
{
do{
i++;
}while(i <=u && x[i] < t);
do{
j--;
}while(x[j] > t);
if(i > j)
break;
swap(x[i], x[j]);
}
swap(x[l], x[j]);
qsort2(l, j-1);
qsort2(j+1, u);
}
C库函数中qsort相对较慢,C++的sort实现非常高效