#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
//单项冒泡排序
void one_way_bubblesort(int a[],int n)
{
//int n = sizeof(a)/sizeof(a[0]);//这里是计算一个数组的长度,对于一个不知道长度的数组,这样可以得出其长度
int N,temp,i,j,k;
for ( i = 0; i < n; i++) {
N = n - i-1;//注意这里是i是0开始的所以要-1;
for ( j = 0; j < N; j++) {
if (*(a + j) > *(a + j + 1)) {
temp = *(a + j + 1);
*(a + j + 1) = *(a + j);
*(a + j) = temp;
}
}
cout << "第" << i + 1 << "次排序结果是:";
for (k = 0; k < n; k++) {
cout << *(a + k) << " ";
}
cout << endl;
}
cout << "最后的排序结果是:";
j = 0;
while (a[j] != '\0') {
cout << a[j] << " ";
j++;
}
cout << endl;
}
//双向冒泡排序
void double_bubblesort(int b[],int n)
{
//int n = sizeof(b) / sizeof(b[0]);//求出数组长度n;
int left, right, l, r, i, j, k, temp;
k = 0;
left = 0;
right = n - 1;//这里注意是数组的index
while (left < right) {//由于是双向排序,所以while里面有两个for循环,分别是从左向右选最大,从右向左选最小
//先要对l,r进行赋值,这里至关重要;如果整个数组本来就是从小到大排序好的,那么就会出错;
l = left + 1;
r = right - 1;
//从左向右找到最大的
for (i = left; i < right; i++)
{
if (*(b + i) > *(b + i + 1)) {
temp = *(b + i);
*(b + i) = *(b + i + 1);
*(b + i + 1) = temp;
r = i;
}
}
right = r;
//从右向左找最小
for (j = right; j > left; j--) {
if (*(b + j) < *(b +j- 1)) {
temp = *(b + j);
*(b + j) = *(b + j - 1);
*(b + j - 1) = temp;
l = j;
}
}
left = l;
cout << "第" << k+1 << "次排序结果:";
i = 0;
while (b[i] != '\0') {
cout << b[i] << " ";
i++;
}
cout << endl;
k++;
}
cout << "最后的双向排序的结果是:";
for (k = 0; k < n; k++) {
cout << b[k] << " ";
}
cout << endl;
}
int main() {
int num[] = { 23,53,20,3,54,1002,2104,201,95,36,21,50,32,56 };
int N = sizeof(num) / sizeof(num[0]);
cout << "总长度是:" << N << endl;
one_way_bubblesort(num, N);
cout << "双向冒泡排序:" << endl;
double_bubblesort(num,N);
}
运行结果展示
好啦,拜拜,要去睡觉了,再见,晚安