标签:
// // 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; }
标签:
原文地址:http://www.cnblogs.com/wohaoxue/p/4656293.html