之前一直使用的是下面这样的排序方法,后来发现这种排序算法其实是不稳定的。
for (int i = 0; i < list.Length; i++)
{
for (int j = i + 1; j < list.Length; j++)
{
if (list[i] > list[j])
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}
也一直以为这就是冒泡排序法,后来复习时看到书上说,冒泡排序发的时候,才恍然大悟,冒泡排序法思想只有两种,一种是冒泡法,一种是沉底法。
从上至下扫描为沉底法,会使大数沉底,需要注意的是“底”越来越高,即每次扫描尾索引减小;从下至上扫描为冒泡法,会使小数浮顶,需要注意的是
"顶"越来越低,即每次扫描头索引增大。而且冒泡排序法是稳定的排序算法。下面分别是冒泡、沉底的写法:
冒泡:
for(int i=0;i<m;i++)
for(int j=m-1;j>i;j--){
if(zs_1[j]<zs_1[j-1]){
int temp1=zs_1[j-1];zs_1[j-1]=zs_1[j];zs_1[j]=temp1;
}
沉底:}
for(int i=0;i<m;i++)
for(int j=0;j<m-1-i;j++)
{
if(zs_1[j]>zs_1[j+1])
{
int temp1=zs_1[j];
zs_1[j]=zs_1[j+1];
zs_1[j+1]=temp1;
}
}