效率最高的冒泡与快排算法 C语言实现

效率最高的冒泡与快排算法 C语言实现

冒泡排序

思想

不断地把最大或最小元素不断冒出来。
如排序5 3 4 9 7 6 2
假如我们用升序的方式,从左边开始扫描,相邻元素两两比较,当左边元素比右边大时就交换,反之,则不用交换。
第一趟循环后的结果为:3 1 5 4 6 7 4 9 这样就把最大的9冒出来了
第二塘循环后的结果为:1 3 4 5 6 4 7 9 这样就把最大的7冒出来了
以此循环,结果如下代码图所示

代码

#include<stdio.h>

void bubbling(int *arr, int N)
{
    int flag = 0;     //flag判断是否有序,,如果有序,马上退出
    for(int i=0; i<N-1; i++)
    {
        flag = 0;
        for(int j=0; j<N-i-1; j++)
            if(arr[j] > arr[j+1])
            {
                flag = 1;
                arr[j]   ^= arr[j+1];
                arr[j+1] ^= arr[j];
                arr[j]   ^= arr[j+1];
            }
/*
        for(int t=0; t<N; t++)
            printf("%d ", arr[t]);
        printf("\n");
*/
        if(flag == 0)
            return;
    }
}



int main(int agrc, char **agrv)
{
    int N;
    scanf("%d", &N);
    int arr[N];
    for(int i=0; i<N; i++)
        scanf("%d", &arr[i]);

    bubbling(arr, N);
    for(int i=0; i<N; i++)
        printf("%d ", arr[i]);
    printf("\n");

    return 0;
}

结果如下:
在这里插入图片描述
在这里插入图片描述

快速排序

思想

快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素;将所有比枢轴元素小的放在其左边;将所有比它大的放在其右边;形成左右两个子表;然后对左右两个子表再按照前面的算法进行排序,直到每个子表的元素只剩下一个。

代码

#include <stdio.h>

int array_num;


void QuickSort(int left, int right, int *quick_sort)
{
    int temp, i=left, j=right;
    if(left >= right) return ;
    temp = quick_sort[i];
    while(i < j)
    {
        while(quick_sort[j]>=temp && i<right) j--;
        quick_sort[i] = quick_sort[j];
        while(quick_sort[i]<=temp && i<j) i++;
        quick_sort[j] = quick_sort[i];
    }
    quick_sort[i] = temp;

     for(int p = 0; p<array_num; p++)
        printf("%d ", quick_sort[p]);
	 printf("\n");

    QuickSort(left, i-1, quick_sort);
    QuickSort(i+1, right, quick_sort);
}



int main(int agrc, char **agrv)
{
    printf("input number:\n");
    scanf("%d", &array_num);
	int quick_sort[array_num];

    for(int j = 0; j < array_num; j++)
       scanf("%d", &quick_sort[j]);

    QuickSort(0, array_num - 1, quick_sort);

/*
    for(int j = 0; j < array_num; j++)
        printf("%d ", quick_sort[j]);
	 printf("\n");
*/

    return 0;
}

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值