zoukankan      html  css  js  c++  java
  • C语言讲义——冒泡排序(bubble sort)

    冒泡排序三步走:

    • 循环
    • 交换
    • 回一手

    • 一个数和其它数比较(循环)
    • 每个数都要做这种比较(再一层循环)

    准备工作

    #include <stdio.h>
    void sort(int arr[],int len) {
    }
    // 打印数组
    void printArray(int arr[],int len ) {
    	int i = 0;
    	for(i = 0 ; i<len; i++) {
    		printf("%d ", arr[i]);
    	}
    	printf("
    ");
    }
    
    int main(int argc, char *argv[]) {
    	// 定义数组
    	int a[5]= {5,4,3,2,1};
    	// 获取获取长度
    	int nLen = sizeof(a)/sizeof(int) ;
    	// 调用函数
    	sort(a, nLen);
    	// 输出结果
    	printArray(a, nLen);
    
    	return 0;
    }
    

    循环、交换

    void sort(int arr[],int len) {
    	int tmp = -1;
    	int i=0;
    	for(i; i<len; i++) {
    		printf("i=%d:
    ", i);
    		int j = 0;
    		for(j; j < len-1; j++) {
    			printf("    比较%d  %d  ", arr[j],arr[j+1]);
    			if (arr[j] > arr[j+1]) {
    				tmp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = tmp;
    			}
    		}
    		printf("
    ", i);
    	}
    }
    

    绿色代表不必要的比较
    通过以下处理可以提高效率:
    1.内层循环每次-i
    2.外层循环最后一次不需要

    回一手

    void sort(int arr[],int len) {
    	int tmp = -1;
    	int i=0;
    	for(i; i<len-1; i++) {
    		printf("i=%d:
    ", i);
    		int j = 0;
    		for(j; j < len-1-i; j++) {
    			printf("    比较%d  %d  ", arr[j],arr[j+1]);
    			if (arr[j] > arr[j+1]) {
    				tmp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = tmp;
    			}
    		}
    		printf("
    ", i);
    	}
    }
    

    总结:冒泡排序三步走,

    1. 循环
    2. 交换
    3. 回一手

    不回一手也行,就是效率稍低一点点。

  • 相关阅读:
    一、redis的简介与安装
    三、Mybatis全局配置文件说明
    第七章、本地方法栈
    第六章、本地方法接口
    二、MyBatis接口开发
    第五章、虚拟机栈
    一、Mybatis入门
    第八章、声明式事务管理
    第七章、JdbcTemplate
    第六章、以XML方式配置切面
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11191536.html
Copyright © 2011-2022 走看看