冒泡排序
来源:互联网 发布:md5加密c语言代码 编辑:程序博客网 时间:2024/06/05 15:28
- <span style=“font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);”>一.基本概念</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一.基本概念</span>
冒泡排序,即对相邻两个数进行比较,如果反序就交换位置,直到整个序列没有出现反序为止。
二.C++实现
(1).最基础的实现,对数组A中每一个相邻元素进行比较。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- for (i = 0 ; i < n-1 ; i++)
- {
- for (j = i+1; j < n ; j ++)
- {
- if ((*A)[i] > (*A)[j])
- {
- temp = (*A)[i];
- (*A)[i] = (*A)[j];
- (*A)[j] = temp;
- }
- }
- }
- }
void Bubble_sort(SortArray *A , int n){ int i , j , temp; for (i = 0 ; i < n-1 ; i++) { for (j = i+1; j < n ; j ++) { if ((*A)[i] > (*A)[j]) { temp = (*A)[i]; (*A)[i] = (*A)[j]; (*A)[j] = temp; } } }}(2)冒泡排序顾名思义,像冒泡一样有大到小,上述算法只是简单地将相邻两个数进行了比较和替换位置,从该算法中不难看出,存在很多多余的比较和替换位置。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- for (i = n -1 ; i >=0 ; i–)
- {
- for (j = 0; j < i ; j ++)
- {
- if ((*A)[j] > (*A)[j+1])
- {
- temp = (*A)[j+1];
- (*A)[j+1] = (*A)[j];
- (*A)[j] = temp;
- }
- }
- }
- }
void Bubble_sort(SortArray *A , int n){ int i , j , temp; for (i = n -1 ; i >=0 ; i--) { for (j = 0; j < i ; j ++) { if ((*A)[j] > (*A)[j+1]) { temp = (*A)[j+1]; (*A)[j+1] = (*A)[j]; (*A)[j] = temp; } } }}(3)(2)中的算法是正宗的冒泡排序算法,但如果数组中本来就存在一定长度的有序数组,上述算法仍需对数组循环遍历一遍。所以增加一个flag对上述算法进行优化。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- bool flag = true;
- for (i = n -1 ; i >=0 ; i–)
- {
- flag = false;
- for (j = 0; j < i ; j ++)
- {
- if ((*A)[j] > (*A)[j+1])
- {
- temp = (*A)[j+1];
- (*A)[j+1] = (*A)[j];
- (*A)[j] = temp;
- flag = true;
- }
- }
- if (flag == false) break;
- }
- }
void Bubble_sort(SortArray *A , int n){ int i , j , temp; bool flag = true; for (i = n -1 ; i >=0 ; i--) { flag = false; for (j = 0; j < i ; j ++) { if ((*A)[j] > (*A)[j+1]) { temp = (*A)[j+1]; (*A)[j+1] = (*A)[j]; (*A)[j] = temp; flag = true; } } if (flag == false) break; }}
算法的时间复杂度为0(N2).
最后附上主程序:
- #include <stdio.h>
- #include “stdafx.h”
- #include <iostream>
- using namespace std;
- #define MAX 100
- typedef int SortArray[MAX];
- int _tmain(int argc, _TCHAR* argv[])
- {
- int n ;
- SortArray A;
- cout<<”/**冒泡排序**/\n”
- <<”请输入数组个数”<<endl;
- cin>>n;
- cout<<”请输入待排序数组”<<endl;
- for (int i = 0 ; i < n ; i++)
- {
- cin>>A[i];
- }
- cout<<”正在排序请稍后…..”<<endl;
- Bubble_sort(&A,n);
- cout<<”排序结果如下…..”<<endl;
- for (int i = 0 ; i < n ; i++)
- {
- cout<<A[i]<<endl;
- }
- system(”pause”);
- return 0;
- }
#include <stdio.h>
include "stdafx.h"
include <iostream>
using namespace std;
define MAX 100
typedef int SortArray[MAX];
int _tmain(int argc, _TCHAR* argv[])
{
int n ;
SortArray A;
cout<<"/冒泡排序/\n"
<<"请输入数组个数"<<endl;
cin>>n;
cout<<"请输入待排序数组"<<endl;
for (int i = 0 ; i < n ; i++)
{
cin>>A[i];
}
cout<<"正在排序请稍后....."<<endl;
Bubble_sort(&A,n);
cout<<"排序结果如下....."<<endl;
for (int i = 0 ; i < n ; i++)
{
cout<<A[i]<<endl;
}
system("pause");
return 0;
}
阅读全文
0 1
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 5-19
- 对Java关键字final和static的理解
- 慕课网秒杀高并发课程学习(tj了,日后再写!)
- idea破解方法
- 无人机管理放大招!实名制能否真的管住黑飞?
- 冒泡排序
- 一次线上服务故障应急问题总结
- 数据类型
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- Ogre传入数组到cg程序中
- java代码执行字符串中的逻辑运算
- 自定义View Measure过程
- iOS 自定义双向滑块Slider
- 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密