冒泡排序的方式有两种:
冒泡排序方法一:
将n[i]这个位置的数与它后面的数进行比较,如果n[i]>n[i+x],那么说明n[i+x]更小,因此将n[i]和n[i+x]的数互换位置。
互换位置后,n[i]便是一个更小的数。接着用新的n[i]与后面的数比较,可以连续得到更小的数,直到取得最小数。
如果i==0,那么最小的数便排列到了序列的最前面n[0]的位置。
因为n[0]是最小的数,那么接下来就要找到一个第二小的数放置在n[1]的位置。
依次循环后,便得到一个升序序列。
代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
void Swap(int n[], int i, int j);
int main()
{
int n[6] = { 6,8,1,5,3,4 };
for (int i = 0; i < 5; i++)
{
for (int j = i + 1; j < 5; j++)
{
if (n[i] < n[j])
{
Swap(n, i, j);
}
}
}
for (int i = 0; i < 5; i++)
{
cout << n[i];
}
cin.get();
return 0;
}
void Swap(int n[], int i, int j)
{
int temp = n[i];
n[i] = n[j];
n[j] = temp;
}
冒泡排序算法二:
将n[i]与n[i+1]进行比较,如果n[i]>n[i+1]为true,那么交换这两个数的位置。
现在n[i+1]是较大的那个数了。
接下来拿n[i+1]和n[i+2]进行比较,如果n[i+1]>n[i+2]为true,则重复上步骤。如果为false,那么n[i+2]原本就是较大的数。
接下来拿n[i+2]再进行比较(无论前面是否交换数,最新的这个数始终是较大的。)。
因此,最后较大的数,就被交换到了数组末尾。
#include "stdafx.h"
#include <iostream>
using namespace std;
void Swap(int n[], int i, int j);
int main()
{
int n[6] = { 6,8,1,5,3,4 };
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5 - i; j++)
{
if (n[j] > n[j + 1])
{
Swap(n, j, j + 1);
}
}
}
for (int i = 0; i < 5; i++)
{
cout << n[i];
}
cin.get();
return 0;
}
void Swap(int n[], int i, int j)
{
int temp = n[i];
n[i] = n[j];
n[j] = temp;
}