数据结构 问题求大神

比如对2 3 1 4* 4 5 排序 希望可以输出 1 2 3 4 4* 5 1 2 3 4* 4 5 两组数

void sort(edge e1[MS],int b)
{
int i,j;
int k;
edge tomp;

for(i=0;i<b;i++)
{
    k=i;
    for(j=i;j<b;j++)
    {
        if(e1[k].w>e1[j].w)
        k=j;
    }
    tomp=e1[k];
    e1[k]=e1[i];
    e1[i]=tomp;
}

}
数列由 选择排序 生成 会被其它函数调用 求哪唯爱大神 给我说下 要怎样改??谢谢

想让相同的数在第二遍输出的时候发生交换,个人认为不用怎么改吧,只用把 if(e1[k].w>e1[j].w) 加一个等号,改为 if(e1[k].w>=e1[j].w) 。
sort第一次调用输出正常顺序,然后再调用一次,这次的输出相同的数就会发生一次交换。不知道对不对?

我那个排序 是选择排序 每次要选出最小的 加等号 选择排序就排不出来了 我试下其它排序 谢谢

提一点建议:首先,选择排序属于不稳定的排序方法,容易改变等值元素的相对前后位置。
建议换一种排序方法,冒泡法应该不会出现这个问题。
其次,正常的顺序都可以排出来了,笨一点的方法就是再写一个等值交换的调用。
不知道是否合题意

void sort(edge e1[MS],int b)
{
int i,j;
edge tomp;
for(i=b-1;i>=0;i--)
{
for(j=b-i-2;j>=0;j--)
{
if(e1[j].w>e1[j+1].w)
{
tomp=e1[j+1];
e1[j+1]=e1[j];
e1[j]=tomp;
}
}

}
}
这个是冒泡排序法,实现了每次选出最小的值。