八大排序之冒泡排序;
Posted destiny-2015
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八大排序之冒泡排序;相关的知识,希望对你有一定的参考价值。
/*八种排序之冒泡排序*/
//冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,
//就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
/* 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。*/
/*双向链表过程:
1、从存储n个待排序元素的表尾开始,并令j=n;
2、若j<2,则排序结束;
3、从第一个元素开始进行两两比较,令i=1;
4、若i>=j,则一趟冒泡排序结束,j=j-1;待排序表的记录数-1,转step2;
5、比较array[i].key与array[i+1].key,若array[i].key<=array[i+1].key,则不交换,转step7;
6、array[i].key>array[i+1].key,将array[i].key于array[i+1].key交换;
7、i = i+1,转step4继续比较
*/
#include <stdio.h>
#define N 8
void BubbleSort(int array[N]) {
for (int i = 1; i < N; i++) //问题1、i为什么从1开始
/*
一共只需排N-1趟,最小的数字在最左边,不用排序;
*/
//问题2、为什么只排序了N-1趟
/*
冒泡排序每趟需要将最大的数移动到最右边,
(以max+下标表示这个数的大小排名,如最大的为MAX1)
第一趟将数MAX1移动到底N-0个数的位置,
第二趟将数MAX2移动到第N-1个数的位置
第三趟将数MAX3移动到第N-2个数的位置
....
第N-1趟将数MAX(n-1)移动到第N-((N-1)-1))==2个位置,
此时仅剩下最小的数排在第一个位置,所以不用再排序了
即一共排序了N-1趟;
*/
{
for (int j = 0; j < N - i; j++) {
//问题3、j为什么等于N-i
/*
第i趟将数MAXi排在第N-(i-1)个位置上,而从第N-(i-1)往后
的数字都已经排好序了,
即后面的数字无需再排
*/
if (array[j] > array[j + 1])
{
int t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
printf("第%d趟排序", i);
for (int a = 0; a < N; a++)
{
printf("%d ",array[a]);
}
printf("
");
}
}
int main() {
int array[N];
for (int i = 0; i < N; i++)
{
scanf("%d", &array[i]);
}
printf("排序前");
for (int i = 0; i < N; i++)
{
printf("%d ", array[i]);
}
printf("
");
BubbleSort(array);
printf("排序后
");
for (int i = 0; i < N; i++)
{
printf("%d ", array[i]);
}
return 0;
}
//实例:
//1,排序问题
//时间限制 : 1Sec 内存限制 : 128MB
// 题目描述
// 将四个整数进行从小到大的顺序排列,
//
// 输入
// 四个整数
//
// 输出
// 从小到大输出这四个数
//
// 样例输入
// 5 3 4 2
// 样例输出
// 2 3 4 5
#include <stdio.h>
#define N 4
void BubbleSort(int array[N]) {
for (int i = 1; i < N; i++)
{
for (int j = 0; j < N - i;j++) {
if (array[j]>array[j+1])
{
int t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
}
for (int i = 0; i < N; i++)
{
printf("%d ", array[i]);
}
}
void main() {
int array[N];
for (int i = 0; i < N; i++)
{
scanf("%d",&array[i]);
}
BubbleSort(array);
}
以上是关于八大排序之冒泡排序;的主要内容,如果未能解决你的问题,请参考以下文章