今天想复习一下两种常见的数组排序方法:选择法排序和冒泡法排序。
选择法排序
选择法排序是指每次选择所要排序的数组中的最大值(由大到小排序,由小到大排序则选择最小值)的数组元素,将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
如下图所示:
功能代码:
/*从小到大排序*/
for(int i = 0;i < 9;i++)//10个数的选择法排序
{
iTemp = a[i];
iPos = i;
for(int j = i + 1;j < 10;j++)//a[i]与下一个值比较
{
if(a[j] < iTemp)
{
iTemp = a[j];
iPos = j;
}
}
/*交换两个元素的值*/
a[iPos] = a[i];
a[i] = iTemp;
}
其实我觉得下面的交换法排序要比选择法排序好理解一点,但更费时间。
交换法排序就是指每一位数与其后的所有数一一比较,如果发现符合条件的值则交换。
功能代码:
for(i = 0;i < n-1;i++)
{
for(j = i + 1;j < n;j++)
{
if(num[j] > num[i])
{
tem = num[j];
num[j] = num[i];
num[i] = tem;
}
}
}
两种方法各有利弊。
冒泡法排序
冒泡法排序是指在排序时,每次比较数组中相邻的数组元素的值,将较小的数(从小到大排列)排在较大的数的前面。
功能代码:
for(i=1;i<10;i++)
{
for(j=9;j>=i;j--)
{
if(a[j]<a[j-1])
{
iTemp=a[j-1];
a[j-1]=a[j];
a[j]=iTemp;
}
}
}