冒泡排序算法(顺序、倒序)
在编写程序过程中,常常需要对数组,列表(List、IList 等)进行排序,排序的方法有很多种,冒泡排序就是其中一种。之所以叫冒泡排序,是因为排序的过程很像冒泡,看了冒泡排序算法的基本思想,更容易理解。
一、冒泡排序算法的基本思想
第一次循环,从数组(或列表)中选出一个最小的排到第一位;第二次循环,又从剩余的数组元素中选出一个最小的排到第二位;依次类推,直接排完所有数组元素,整个过程是不是很像冒泡。
二、C#冒泡排序算法(顺序)
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="arr">待排序数组</param>
public void BubbleSort(int[] arr)
{
int temp;
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
调用方法:
int[] a = new int[] { 36, 7, 120, 89, 3, 56, 23, 45 };
BubbleSort(a);
foreach (int n in a)
label.Text += n.ToString() + " ";
输出结果:3 7 23 36 45 56 89 120(测试通过)
三、C#冒泡排序算法(倒序)
倒序跟顺序基本相同,只是把 if (arr[j] > arr[j + 1]) 中的 > 改为 < 即可,代码如下:
/// <summary>
/// 冒泡排序(倒序)
/// </summary>
/// <param name="arr">待排序数组</param>
public void BubbleSort(int[] arr)
{
int temp;
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] < arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
调用方法:
int[] a = new int[] { 36, 7, 120, 89, 3, 56, 23, 45 };
BubbleSort(a);
foreach (int n in a)
label.Text += n.ToString() + " ";
输出结果:120 89 56 45 36 23 7 3(测试通过)
四、C语言冒泡排序算法(顺序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubblesort(int a[], int n)
{
int i,j,temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void main ()
{
int a[8] = {36, 7, 120, 89, 3, 56, 23, 45};
bubblesort(a, 8);
int i;
for (i = 0; i < 8; i++)
printf("%d,",a[i]);
printf("\n");
}
输出结果:3,7,23,36,45,56,89,120
五、C语言冒泡排序算法(倒序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubblesort(int a[], int n)
{
int i,j,temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void main ()
{
int a[8] = {36, 7, 120, 89, 3, 56, 23, 45};
bubblesort(a, 8);
int i;
for (i = 0; i < 8; i++)
printf("%d,",a[i]);
printf("\n");
}
输出结果:120,89,56,45,36,23,7,3