冒泡排序
算法分析:
从一组数据头部开始,相邻数值依次比较,若后边的数比前边的大(从小到大排列),则交换位置。(即较小的数排到前边,实现冒泡。)
初始序列
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 5 | 8 | 3 | 6 | 1 | 9 |
第一步:
" 5 “与后边的” 8 " 比较," 8 “比” 5 “大,则不交换。
" 8 “与后边的” 3 " 比较,” 8 “比” 3 "大,则交换。
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 5 | 3 | 8 | 6 | 1 | 9 |
" 8 “与后边的” 6 " 比较," 8 “比” 6 "大,则交换。
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 5 | 3 | 6 | 8 | 1 | 9 |
" 8 “与后边的” 1 " 比较," 8 “比” 1 "大,则交换。
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 5 | 3 | 6 | 1 | 8 | 9 |
" 8 “与后边的” 9 " 比较," 8 “比” 9 "小,则不交换。
第一轮交换结果为:
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 5 | 3 | 6 | 1 | 8 | 9 |
第二步:
重复第一步 i 轮( i 为序列中数值的个数)
需要注意,前 i 轮已经将后 i 个最大的数放在了最后边,后几轮无需再去比较,因此控制循环时需要减去 i
最终结果为:
序号 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
数值 | 1 | 3 | 5 | 6 | 8 | 9 |
源码:
C语言:
#include<stdio.h>
int main()
{
int nums[6] = {5,8,3,6,1,9};
int i = 0, j = 0, temp = 0;
for (i = 0; i < 5; i++ ) {
for (j = 0; j < 5 - i; j++) {
if (nums[j] > nums[j + 1]) {
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
for (i = 0; i < 6; i++) {
printf("%d ", nums[i]);
}
return 0;
}
C++:
#include<iostream>
using namespace std;
int main() {
int nums[6] = {5,8,3,6,1,9};
int i ,j ;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5 - i; j++){
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j + 1] = temp;
}
}
}
for (i = 0; i < 6; i++)
{
cout << nums[i] << " ";
}
return 0;
}
Java:
public class testcomment{
public static void main(String[] args) {
int [] nums = new int[] {5,8,3,6,1,9};
int i = 0 , j,temp,count = 0,done = 1;
while ((i < nums.length-1) && done == 1)
{
j = 0;
done = 0;
while (j<nums.length-1-i)
{
if(nums[j] > nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
done = 1;
}
j++;
count ++;
}
i++;
}
for(i = 0;i<nums.length-1;i++) {
for(j = 0;j <nums.length-1-i;j++) {
if(nums[j] > nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
}
Python:
nums = [5,8,3,6,1,9];
m = 0;
while m < len(nums):
n = 0
while n < len(nums)-1 -m:
if nums[n] > nums[n+1]:
nums[n] , nums[n+1] = nums[n+1],nums[n];
n += 1;
m+=1;
print(nums)