![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
class
BubbleSort
{
public int count = 0 ;
public void Sort( int [] arr)
{
int i, j, temp;
bool done = true ;
j = 1 ;
while ((j < arr.Length) && (done)) // 判断长度
{
done = false ;
for (i = 0 ; i < arr.Length - j; i ++ )
{
if (arr[i] > arr[i + 1 ])
{
done = true ;
temp = arr[i];
arr[i] = arr[i + 1 ]; // 交换数据
arr[i + 1 ] = temp;
count ++ ;
}
}
j ++ ;
}
}
static void print( int [] mIntArr)
{
foreach ( int i in mIntArr)
Console.Write( " {0} " ,i);
}
static void Change( ref int i1, ref int i2)
{
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
}
static void bubbleSort( int [] a, out int n)
{
n = 0 ;
bool bIsNeedRoop = false ;
for ( int i = 0 ;i < a.Length;i ++ )
{
bIsNeedRoop = false ;
for ( int j = 0 ;j < a.Length - i - 1 ;j ++ )
{
if (a[j] > a[j + 1 ])
{
Change( ref a[j], ref a[j + 1 ]);
bIsNeedRoop = true ;
n ++ ;
}
}
// 如果查询一次后发现不需交换,说明已经排完序
// 可以直接退出
if ( ! bIsNeedRoop) return ;
}
}
static void bubbleSortBad( int [] a, out int n)
{
n = 0 ;
for ( int i = 0 ;i < a.Length - 1 ;i ++ )
{
for ( int j = 0 ;j < a.Length - i - 1 ;j ++ )
{
if (a[j] > a[j + 1 ])
{
Change( ref a[j], ref a[j + 1 ]);
}
n ++ ;
}
}
}
static void Main()
{
int [] arrInt = { 6 , 1 , 2 , 3 , 5 };
int [] arrInt2 = ( int [])arrInt.Clone();
int count;
print(arrInt);
bubbleSort(arrInt, out count);
Console.WriteLine( " 优化冒泡排序总共遍历了{0}次 " ,count);
print(arrInt);
Console.WriteLine();
int count2;
print(arrInt2);
bubbleSortBad(arrInt2, out count2);
Console.WriteLine( " 冒泡排序总共遍历了{0}次 " ,count2);
print(arrInt2);
// Console.WriteLine(arrInt.ToString());
Console.ReadKey();
}
}
{
public int count = 0 ;
public void Sort( int [] arr)
{
int i, j, temp;
bool done = true ;
j = 1 ;
while ((j < arr.Length) && (done)) // 判断长度
{
done = false ;
for (i = 0 ; i < arr.Length - j; i ++ )
{
if (arr[i] > arr[i + 1 ])
{
done = true ;
temp = arr[i];
arr[i] = arr[i + 1 ]; // 交换数据
arr[i + 1 ] = temp;
count ++ ;
}
}
j ++ ;
}
}
static void print( int [] mIntArr)
{
foreach ( int i in mIntArr)
Console.Write( " {0} " ,i);
}
static void Change( ref int i1, ref int i2)
{
int tmp;
tmp = i1;
i1 = i2;
i2 = tmp;
}
static void bubbleSort( int [] a, out int n)
{
n = 0 ;
bool bIsNeedRoop = false ;
for ( int i = 0 ;i < a.Length;i ++ )
{
bIsNeedRoop = false ;
for ( int j = 0 ;j < a.Length - i - 1 ;j ++ )
{
if (a[j] > a[j + 1 ])
{
Change( ref a[j], ref a[j + 1 ]);
bIsNeedRoop = true ;
n ++ ;
}
}
// 如果查询一次后发现不需交换,说明已经排完序
// 可以直接退出
if ( ! bIsNeedRoop) return ;
}
}
static void bubbleSortBad( int [] a, out int n)
{
n = 0 ;
for ( int i = 0 ;i < a.Length - 1 ;i ++ )
{
for ( int j = 0 ;j < a.Length - i - 1 ;j ++ )
{
if (a[j] > a[j + 1 ])
{
Change( ref a[j], ref a[j + 1 ]);
}
n ++ ;
}
}
}
static void Main()
{
int [] arrInt = { 6 , 1 , 2 , 3 , 5 };
int [] arrInt2 = ( int [])arrInt.Clone();
int count;
print(arrInt);
bubbleSort(arrInt, out count);
Console.WriteLine( " 优化冒泡排序总共遍历了{0}次 " ,count);
print(arrInt);
Console.WriteLine();
int count2;
print(arrInt2);
bubbleSortBad(arrInt2, out count2);
Console.WriteLine( " 冒泡排序总共遍历了{0}次 " ,count2);
print(arrInt2);
// Console.WriteLine(arrInt.ToString());
Console.ReadKey();
}
}