
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();
}
}