排序算法:
(1)冒泡排序:像冒泡一样,比较相邻的两个数,比较轮数为n-1次
int j,tmp;
for(i = 0;i < N - 1;i++) //比较N-1次
{
for(j = N - 1;j > i;j--)
{
if(a[j - 1] > a[j])
{
tmp = a[j - 1];
a[j - 1] = a[j];
a[j] = tmp;
}
}
}
(2)选择排序:从后面的数中寻找最小的一个数进行交换
//排序
int j,tmp,k;
for(i = 0;i < N - 1;i++)
{
k = i;
for(j = i + 1;j < N;j++)
{
if(a[k] > a[j])
{
k = j;
}
}
if(k != i)
{
tmp = a[k];
a[k] = a[i];
a[i] = tmp;
}
}
(3)插入排序:不断扩充有序列,插入位置由右向左找
//排序
int j,tmp;
for(i = 1;i < N;i++)
{
if(a[i - 1] > a[i])
{
tmp = a[i];
for(j = i - 1;j >= 0 && tmp < a[j];j--)
{
a[j + 1] = a[j];
}
a[j + 1] = tmp;
}
}
(4)二分法排序:不断扩充有序列,插入的位置由二分法决定
//排序
int j;
int mid,low = 0,high = 0;
int tmp = 0;
for(i = 1;i < N;i++)
{
low = 0;
high = i - 1;//有序数列的上限
tmp = a[i];//要进行判断/插入的数
while(low <= high)//做上限修正,直至确定插入的位置
{
mid = (low + high) / 2;
if(tmp < a[mid])//判断数 <?>中值
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
for(j = i;j > low;j--)
{
a[j] = a[j - 1];
}
a[low] = tmp;
}