算法笔记——排序算法

👌,begin:

排序算法很重要,它可以使数据按照一定的规律进行排序,各个语言的代码都有自己的排序函数,那么排序到底有哪几种方法,✌,如下:

按照效率分类如上图:

其中用的最多的当属快速排序,我理解的排序思路(🐏),首先我们选定一个基准数,假设选定一个需要排序的十个数据的数组的第一个值。我们定义两个指针,i指向第一个位置,j指向最后一个位置,首先j从后往前走,如果遇到比选定的基准数小的数,停止,i从前向后走,如果遇到大于基准数的数,停止,交换两个位置的数据,然后重复这个过程直到,i和j相遇(或者超过他),最终,交换i位置的数据和基准位置的数据。这样基准位置的左边所有的数都会小于他,右边的数都会大于他,然后对于左右两段,利用同样的方法进行排序。

function quickSort(int left,int right){

定义两个指针,以及基准值
int i,j,temp;

if(left>=right) return;

i=left;
j=right;
temp=nums[i];

while(i!=j){
    while(nums[j]>=temp&&i<j){ j--;}
    while(nums[i]<=temp&&i<j){ i++;}
    swap(nums[i],nums[j]);
}

nums[left]=nums[i];
nums[i]=temp;

quickSort(left,i-1);
quickSort(i+1,right);

 

冒泡排序,命名来自于这个算法所使用的方法,就类似于水中的气泡咕嘟咕嘟网上冒,

算法的⚪理如下:

从头开始,比较第一个和第二个数据,将大的移到后面(升序的方案,也可以自定义降序排序),然后比较第二个和第三个,一次类推,第一轮将最大移动到最后一位,第二轮将第二大的数据移动到倒数第二位,最终经过n(n-1)(n-2)……的交换,可以得到有序的数组

function(){
    for(int i=0;i<nums.size();i++){
        for(int j=0;j<nums.size()-i-1;i++){
            if(nums[j]>nums[j+1]) swap(nums[i],nums[j]);
        }
    }
}

当然,如果一直交换就有点蠢,那么进行一次优化,在两个循环之间定义一个标志,如果里面的for循环一次交换都没有发生,我们就可以自然而然的结束这次排序过程;

function(){
    for(int i=0;i<nums.size();i++){
        bool flag=true;
        for(int j=0;j<nums.size()-i-1;i++){
            if(nums[j]>nums[j+1]){
                swap(nums[i],nums[j]);
                flag=false;
            }  
        }
        if(flag){break;}
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值