您的位置:首页 > 其它

冒泡排序详解7-20

2015-07-18 10:10 447 查看
//
//  main.m
//  Mypritice1
//
//  Created by laouhn on 15/7/18.
//  Copyright (c) 2015年 池海涛. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
/*
int a[5] = {38,24,18,29,10};
//冒泡排序
int temp = 0;
for (int i = 0; i < 5 - 1; i++) {
for (int j = 0; j < 5 - 1 - i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j+1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%d ",a[i]);
}
*/
//冒泡排序详解
/*
1.冒泡排序的原理
//38,24,18,29,10
//两两比较,大的前移
第一遍循环比较
24,38,18,29,10
24,18,38,29,10
24,18,29,38,10
24,18,29,10,38
第二遍循环比较
18,24,29,10,38
18,24,29,10,38
18,24,10,29,38
第三遍循环比较
18,24,10,29,38
18,10,24,29,38
第四遍循环比较
10,18,24,29,38
每一趟找出最大值
*/

int a[5] = {38,24,18,29,10};
int temp = 0;
//第一趟的比较找出最大值,注意i < 5 - 1不能为i < 5 否则越界
for (int i = 0;  i < 5 - 1; i++ ) {
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
//第二趟比较
for (int i = 0;  i < 5 - 1; i++ ) {
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
//第三趟比较
for (int i = 0;  i < 5 - 1; i++ ) {
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
//第四趟比较
for (int i = 0;  i < 5 - 1; i++ ) {
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
//从上面可以看出没一趟的比较代码都是一样的
//5个数排序,比较4趟,n个数排序比较n - 1趟,    //所以在for循环外加一个for循环,表示循环的趟数
for (int j = 0; j < 5 -1; j++) {//循环了4趟
for (int i = 0;  i < 5 - 1; i++ ) {//每趟比较了4次
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
//每一趟比较了4次,照成不必要的比较,第一趟比较4次,第二趟比较3次,第三趟比较2,第四趟比较1次
//上面的代码照成了无用的循环
for (int j = 0; j < 5 -1; j++) {//循环了4趟
for (int i = 0;  i < 5 - 1 - j; i++ ) {//每趟比较了5 -1 -j次
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: