快速排序/冒泡/选择

11 篇文章 0 订阅

快排C++

#include <iostream>
int subSort(int num[],int l,int r){
    int X=num[l];
    int i=l;
    int j=r;
    while(i<j){
        while(num[j]>=X&&i<j) j--; 
        if (num[j]<X){//找到一个比X小的,则从右边找停止,开始从左边找
            num[i]=num[j];//这里并没与覆盖,因为第一个值作为中值使用了
            i++;
        }
        while(num[i]<=X&&i<j) i++;
        if(num[i]>X){//找到一个比X大的,则从左边找停止,开始从右边找
            num[j]=num[i];
            j--;
        }
       
    }
    num[i]=X;//中心元素
    return i;
}
void quick_sort(int s[], int l, int r)
{
	if (l < r)
    {
		int i = subSort(s, l, r);//先成挖坑填数法调整s[]
		quick_sort(s, l, i - 1); // 递归调用 
		quick_sort(s, i + 1, r);
	}
}
int main() {
    int data[]={72,34,56,90,20,68,10,40};
    int i;
    quick_sort(data,0,7);
    for(i;i<=7;i++){
        cout<<data[i]<<endl;
    }
    
}

快排python

def sortsub(s,l,r):
    x=s[l]  #这里我们选择左首作为排序中值
    i=l
    j=r
    while(i<j):
        while((x<=s[j])&(i<j)): j-=1#左首中值,那么我们先从右手开始找,因为此时左手有空位
        if (x>s[j]):
            s[i]=s[j]
            i+=1
        while((x>=s[i])&(i<j)):  i+=1
        if (x<s[i]):
            s[j]=s[l]
            j-=1
    s[i]=x
    return i,s
def FindSort(s,l,r):
    if (l<r):
        i,s = sortsub(s, l, r)
        FindSort(s,l,i-1)
        FindSort(s,i+1,r)
    return s
s=[1,6,3,6,2,8,9,10]#如果有相同的值也是
s=FindSort(s,0,6)
print(s)

冒泡python

def sort(num):
    for i in range(len(num)-1):#len(num)-1
        for j in range(len(num)-i-1):
            if num[j]<num[j+1]:#更改符号>变为从小到大
                t=num[j]
                num[j]=num[j+1]
                num[j+1]=t
    return num
print(sort([4,6,7,5,1,2])) 
print(sort([3,9,2,1,0,7,2,6]))

选择排序python

def sort(num):
    for i in range(len(num)):
        Min=num[i]
        local=i
        for j in range(i+1,len(num)):
            if Min>num[j]:             
                Min=num[j]
                local=j       
        if local!=i:
            t=num[i]
            num[i]=num[local]
            num[local]=t
    return num
print(sort([4,6,7,5,1,2]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值