• 冒泡排序及两种优化方式


    定义:每一趟依次比較相邻的两个数。将小数放在前面。大数放在后面,直到一趟仅仅剩下一个元素。
    时间复杂度:O(n^2)。


    冒泡排序是最经常使用的小型数据排序方式。以下是用C语言实现的,及其两种优化方式。

    第一种优化方式是设置一个标记位来标记是否发生了交换,假设没有发生交换就提前结束;

    另外一种优化方式是记录最后发生交换的位置。作为下一趟比較结束的位置。


    #include <stdio.h>
    
    /*
     * 打印数组
     * */
    void printArray(int arr[], int n) {
    	int i = 0;
    	for (i = 0; i < n; ++i) {
    		printf("%d ", arr[i]);
    	}
    	printf("
    ");
    }
    
    /*
     * 冒泡排序
     * */
    void bubbleSort(int arr[], int n) {
    	int i = 0;
    	int j = 0;
    	int tmp = 0;
    	for (i = 0; i < n; ++i) {
    		for (j = 0; j < n - 1 - i; ++j) {
    			if (arr[j] < arr[j + 1]) {
    				tmp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = tmp;
    			}
    		}
    	}	
    }
    
    /*
     * 冒泡排序优化一
     * 设置一个标记来标志一趟比較是否发生交换
     * 假设没有发生交换。则数组已经有序
     * */
    void bubbleSort1(int arr[], int n) {
    	int i = 0;
    	int j = 0;
    	int tmp = 0;
    	int flag = 0; 
    	for (i = 0; i < n; ++i) {
    		flag = 0;
    		for (j = 0; j < n - 1 - i; ++j) {
    			if (arr[j] < arr[j + 1]) {
    				flag = 1;
    				tmp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = tmp;
    			}
    		}
    		if (flag == 0) {
    			break;
    		}
    	}	
    }
    
    /*
     * 冒泡排序优化二
     * 用一个变量记录下最后一个发生交换的位置。后面没有发生交换的已经有序
     * 所以能够用这个值来作为下一次比較结束的位置
     * */
    void bubbleSort2(int arr[], int n) {
    	int i = 0;
    	int j = 0;
    	int k = 0;
    	int tmp = 0;
    	int flag = n; 
    
    	for (i = 0; i < flag; ++i) {
    		k = flag;
    		flag = 0;
    		for (j = 0; j < k; ++j) {
    			if (arr[j] < arr[j + 1]) {
    				flag = j;
    				tmp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = tmp;
    			}
    		}
    	}	
    }
    int main() {
    	int arr[] = {9, 5, 8, 4, 7, 3, 2, 0, 6, 1};
    	printArray(arr, 10);
    	bubbleSort2(arr, 10);
    	printArray(arr, 10);
    
    	return 0;
    }
    




  • 相关阅读:
    Ognl表达式基本原理和使用方法
    Struts的拦截器
    Struts框架的核心业务
    Struts2框架基础
    Struts的文件上传下载
    .JavaWeb文件上传和FileUpload组件使用
    mysql数据库连接与锁查询
    关于MyBatis的@Mapper和@MapperScan注解的一点思考
    Hystrix报错java.util.concurrent.TimeoutException: null
    The Hystrix timeout of 2000ms for the command xxx is set lower than the combination of the Ribbon read and connect timeout, 4000ms.
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7017223.html
Copyright © 2020-2023  润新知