插入,选择,冒泡排序(C/python略)

52 篇文章 0 订阅
37 篇文章 0 订阅

C代码

#include<stdio.h>
#include<stdlib.h>

//选择排序
/*将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个
最小值,并放入前端已排序部份的最后一个,例如:
10 7 11 4 8    
4 | 7 11 10 8   选出最小4
4 7 | 11 10 8   选出最小7
4 7 8 |10 11   选出最小8
4 7 8 10 | 11 
*/

#define SWAP(x,y) {int temp;temp=x;x=y;y=temp;}

void selsort(int *num,int N)
{
    int i,j;
    //len=get_array_len(num);
    for (i = 0; i < N-1; i++)
    {
        int min = i;
        for (j = i+1; j < N; j++)
        {
            if (num[min] > num[j])
                SWAP(num[min], num[j]);
        }
    }
    for (i = 0; i < N; i++)
    {
        printf("%d ", num[i]);
    }
}

//插入排序
/*像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一
堆牌的适当位置,例如:
10 7 11 4 8
7 10 | 11 4 8
7 10 11 | 4 8
4 7 10 11 | 8
4 7 8  10  11
*/
void InsSort(int *num,int N)
{
    int i,j;
    for (i = 1; i < N; i++)
    {
        int temp = num[i];
        for (j = i-1; j >= 0; j--)
        {

            if (num[i] > num[j])
            {
                for (int k = i - 1; k >= j+1; k--)
                    num[k + 1] = num[k];
                num[j + 1] = temp;
                break;
            }
            if (j == 0)
            {
                for (int k = i - 1; k >= 0; k--)
                    num[k + 1] = num[k];
                num[j] = temp;
            }

        }

    }
    for (i = 0; i < N; i++)
    {
        printf("%d ", num[i]);
    }
}
void InsSort_two(int *num, int N)
{
    int i, j;
    for (int i = 1; i < N; i++)
    {
        j = i - 1;
        int temp = num[i];
        while (temp < num[j])
        {
            num[j+1] = num[j];
            j--;
            if (j == -1)
                break;
        }
        num[j+1] = temp;
    }
    for (i = 0; i < N; i++)
        printf("%d ", num[i]);
}

//冒泡排序
/*顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,
将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。
如:
3 10 7 11 4 8
3 7 4 8 10 | 11
3 4 7 8 | 10 11
3 4 7 | 8 10 11  (可优化)*/
void bubsort(int num[], int N)
{
    int i, j;
    for (int i = 0; i < N - 1; i++)
    {
        for (j = 0; j < N - 1-i; j++)
            if (num[j+1] < num[j])
                SWAP(num[j+1], num[j]);
    }
    for (i = 0; i < N; i++)
        printf("%d ", num[i]);
}
int main()
{
    int num[10] = { 4,2,6,8,12,44,11,5,1,56 };
    //printf("%d", sizeof(num)/sizeof(num[1]));
    //InsSort(num,10);
    //InsSort_two(num, 10);
    bubsort(num,10);
    system("pause");
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值