• 基础篇,排序(冒泡排序,快速排序)


    快速排序的基本思想:挖坑填数+分治法
    1. 从序列当中选择一个基准数(pivot)
    在这里我们选择序列当中第一个数最为基准数
    1. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧
    2. 重复步骤1.2,直到所有子集当中只有一个元素为止。
    伪代码描述如下:
    1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
    2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
    3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
    4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中

    //左分区 < 基准 < 右分区 void qsort(int *array, int left,int right) { if(left < right) { int point = array[left];//设置基准 int low = left; //设置分区最左值 int hight = right; //设置分区最右值 // cout<<point<<low<<hight<<endl; while(low < hight) { while((low<hight) && (point <= array[hight])) --hight; // cout<<hight<<endl; array[low] = array[hight]; //找到右分区比基准值小的,替换基准值元素原有数据 while((low<hight) && (point > array[low])) ++low; //找到左分区比基准值大的值,替换该值元素到原来 hight的位置 // cout<<low<<endl; array[hight] = array[low]; //找到右分区比基准值小的,替换基准值元素原有数据 } array[low] = point; qsort(array, left, low-1); qsort(array, low+1, right); } } int main() { int a[] = {2,4,6,23,56,25,8,21,32,5,7,9}; int lenght = sizeof(a)/sizeof(int)-1; cout<<lenght<<endl; qsort(a, 0, lenght); for(int i=0; i<lenght;++i) { cout<<a[i]<<" "; } cout<<" "<<endl; }
    冒泡排序思路比较简单:
    将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;
    ( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)
    对序列当中剩下的n-1个元素再次执行步骤1。
    对于长度为n的序列,一共需要执行n-1轮比较
    (利用while循环可以减少执行次数)
    *代码实现
    
    #冒泡排序
    def bubble_sort(L):
        length = len(L)
    #序列长度为length,需要执行length-1轮交换
        for x in range(1,length):
    #对于每一轮交换,都将序列当中的左右元素进行比较
    #每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可
            for i in range(0,length-x):
                if L[i] > L[i+1]:
                    temp = L[i]
                    L[i] = L[i+1]
                    L[i+1] = temp
  • 相关阅读:
    hdu1418 欧拉公式
    hdu1215七夕节 筛选法求公因子和
    hdu1215 The area
    hdu1005Number Sequence
    hdu1021 数学题 并不是说难,而是数学题那种简单朴素的思想get不到
    Mongo第三个参数的用法
    js 显示刚刚上传的图片 (onchange事件)
    在linux中安装memcache服务器
    jQuery 倒计时
    PHP获取文章发布时间
  • 原文地址:https://www.cnblogs.com/Lijcyy/p/13837278.html
Copyright © 2020-2023  润新知