用到的编辑器:eclipse 即可,代码用的是java和c++ 其他语言原理一样,也能看明白的!
冒泡排序(Bubble Sort)
(1)、它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
(2)、这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
1、 实现原理
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 [1]
2、时间空间复杂度
冒泡排序总的平均时间复杂度为
3、代码实现
3.1、使用数组的形式
//引入数组Jar包,编辑器自动导入
import java.util.Arrays;
public class maopao {
public static void main(String[] args) {
int[] arr = new int[] { 5,6,3,1,8,7,2,4 };
maopao(arr);
// 输出数组
System.out.println(Arrays.toString(arr));
}
public static void maopao(int[] arr) {
// 控制共比较多少论
for (int i = 0; i < arr.length - 1; i++) {
// 控制比较次数
for (int j = 0; j < arr.length - 1 - i; j++) {
//比较左边数字是否比右边数字大,如果比右边数字大,则进入if语句,如果不大,则进入下一层循环。
if (arr[j] > arr[j + 1]) {
//讲两者较大的数字给 temp
int temp = arr[j];
//将较小的数给左边的数字
arr[j] = arr[j + 1];
//讲两者最大的数字给右边的数
arr[j + 1] = temp;
}
}
}
}
}
3.2、控制台输出:
3.3、C++实现
void swap( int& a, int& b ){
int c=a; a = b; b = c;
}
void bubble( int* p, int len ){
bool bSwapped;
do {
bSwapped = false;
for( int i=1; i<len; i++ ){
if( p[i-1]>p[i] ){
swap( p[i-1], p[i] );
bSwapped = true;
}
}
}while( bSwapped );
}
如果对您有帮助,那么我非常开心,如果有什么想法请留言