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

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;
}
点赞