Senior Dogsbody Engineer  

1、冒泡法

依次比较相邻的两个数,将小数换到前面,大数换在后面。

第一趟,过程如下概述:

首先,比较第1个和第2个数,将小数换前,大数换后。

然后,比较第2个数和第3个数,将小数换前,大数换后。

如此继续,比较第n个数和第(n + 1)个数,将小数换前,大数换后。

直至比较最后两个数,将小数换前,大数换后。

至此,第一趟结束,将最大的数换到了最末位。

第二趟:仍从第一对数开始比较(因为可能由于第一趟时第2个数和第3个数的交换后,使得第1个数不再小于第2个数),将小数换前,大数换后。

一直比较到倒数第二个数(倒数第一的位置上已经是最大的)。第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。

如此下去,重复以上过程,直至最终完成排序。

复制代码
void bubble_sort(char *src) {
    int iLen = strlen(src);
    for (int j = iLen; j > 0; j--) {
        for (int i = 0; i < j - 1; i++) {
            if (*(src + i) > *(src + i + 1)) {
                char temp = *(src + i);
                *(src + i) = *(src + i + 1);
                *(src + i + 1) = temp;
            }
        }
    }
}

int main() {
    char arr[7] = {3, 6, 9, 1, 5, 2, 8};
    bubble_sort(arr);

    for (int i = 0; i < 7; i++) {
        printf("%d ", arr[i]);
    }

    return 1;
}
复制代码

 

2. 选择法

每一趟从待排序的数据元素中选出最小(或最大)的一个元素;顺序放在已排好序的数列的最后;直到全部待排序的数据元素排完。

示例如下:

初始关键字    [49 38 65 97 76 13 27 49]

第一趟排序后 13  [38 65 97 76 49 27 49]

第二趟排序后 13 27 [65 97 76 49 38 49]  

第三趟排序后 13 27 38  [97 76 49 65 49]

第四趟排序后 13 27 38 49  [76 97 65 49 ]  

第五趟排序后 13 27 38 49 49  [97 65 76]

第六趟排序后 13 27 38 49 49 65  [97 76]

第七趟排序后 13 27 38 49 49 65 76  [97]

最后排序结果 13 27 38 49 49 65 76  97

复制代码
void SelectSort(int br[],int n)
{
    for(int i = 0; i < n; ++i)
    {
        int k = i;
        for(int j = i + 1; j < n; ++j)
        {
            if(br[k] > br[j])//br[k] 大于br[j],记下j, 并从br[j]开始继续和后面的元素比较
            {
                k = j;
             }
        }
        if(k != i)    //k发生过变化,说明br[k]是最小的,交换br[k]与br[i]
        {
            int temp = br[k];
            br[k] = br[i];
            br[i] = temp;
         }
     }
 }
复制代码

 

posted on   高级打杂工程师  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
 
点击右上角即可分享
微信分享提示