我经常在程序上遇到排序的问题,经常选择起泡法排序。其实,我也写过很多次,但每次需要真正用的时候,却经常会有些模糊,所以在这里将该方法记录下来,铭记,铭记!
正常的起泡法排序算法如下:
假设有一组数足
int[] myArray = new int[10];
//在这里假设已经给myArray赋值
现在按从小到大进行排序:
for(int i=0;i<myArray.length-1;i++)
{
for(int j=i;j<myArray.length;j++)
{
if(myArray[i]>myArray[j])
{
int midValue = myArray[i];
myArray[i] = myArray[j];
myArray[j] = midValue;
}
}
}
通过以上方法,即可将myArray数组完成排序。
有时候,我们也许需要对排序法进行改进,根据我们实际需求来实现排序。例如,在我的项目中,对用户数组根据userId属性按从小到大进行排序,以便于生成的用户下拉列表是按照一定顺旬进行加载的。
//根据userId的值从小到大的顺序,对userIds和userNames数组重新排序
int smallIndex;
for(int i=0;i<recordNums-1;i++)
{
smallIndex = i;
for(int j=i+1;j<recordNums;j++)
{
//if(userIds[i]>userIds[j])
//{
if(userIds[smallIndex]>userIds[j])
smallIndex = j;
//}
}
if(smallIndex!=i)
{
int midUserId = userIds[i];
userIds[i] = userIds[smallIndex];
userIds[smallIndex] = midUserId;
string midUserName = userNames[i];
userNames[i] = userNames[smallIndex];
userNames[smallIndex] = midUserName;
string midUserUnitName = userUnitNames[i];
userUnitNames[i] = userUnitNames[smallIndex];
userUnitNames[smallIndex] = midUserUnitName;
}
}