真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【C語言深度解剖】冒泡排序你那些不知道的問題!-創(chuàng)新互聯(lián)

C語言在實(shí)現(xiàn)冒泡排序時出現(xiàn)的問題

禹州網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,禹州網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為禹州千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的禹州做網(wǎng)站的公司定做!文章目錄
  • C語言在實(shí)現(xiàn)冒泡排序時出現(xiàn)的問題
  • 前言
  • 一、冒泡排序是什么?
  • 二、使用步驟
    • 1.簡單冒泡排序
    • 2.高級冒泡排序(針對于所有排序)
    • (1)main函數(shù)中參數(shù)的選擇
    • (2)bubblesort函數(shù)的實(shí)現(xiàn)原理
    • (3)比較函數(shù)的實(shí)現(xiàn)
    • (4)交換函數(shù)的實(shí)現(xiàn)
    • (5)打印函數(shù)的實(shí)現(xiàn)
  • 總結(jié)


前言

它重復(fù)地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯誤就把他們交換過來。走訪元素的工作是重復(fù)地進(jìn)行,直到?jīng)]有相鄰元素需要交換,也就是說該元素列已經(jīng)排序完成。


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、冒泡排序是什么?

冒泡排序(Bubble Sort),是一種計算機(jī)科學(xué)領(lǐng)域的較簡單的排序算法。

二、使用步驟 1.簡單冒泡排序

代碼如下(示例):

void bubblesort(int arr[], int sz)
{int i = 0;
    for (i = 0; i< sz-1;i++)
    {int j = 0;
        for (j = 0; j< sz - 1 - i; j++)
        {if (arr[j] >arr[j + 1])
            {int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}
void print_arr(int arr[], int sz)
{int i = 0;
    for (i = 0; i< sz; i++)
    {printf("%d ", arr[i]);
    }
}
int main()
{int arr[10] = {9,8,7,6,5,4,3,2,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    print_arr(arr, sz);
}

簡單的冒泡排序具有一定的局限性,它無法對字符串或者結(jié)構(gòu)體成員進(jìn)行排序,所以接下來我為大家講解高級冒泡排序?。?!

2.高級冒泡排序(針對于所有排序)

首先我們要實(shí)現(xiàn)main函數(shù),對于實(shí)現(xiàn)高級冒泡排序,我引用qsort庫函數(shù)的知識!

這個就是qsort的函數(shù)參數(shù)(MSDN獲?。谒膫€參數(shù)中,第一個參數(shù)用指針void*來接受,即它可以表示任意類型的數(shù)組!二三參數(shù)分別表示元素個數(shù)和元素一個的寬度!最后一個參數(shù)較為復(fù)雜,下文會有詳解!
以qsort庫函數(shù)參數(shù)為例,可以對BubbleSort函數(shù)參數(shù)全面改造一下


void bubblesort(void* base,int num,int width,int(*cmp)(const void*e1,const void*e2)

可能會有同學(xué)問為什么左后一個參數(shù)里面是void* e1和void* e2
因?yàn)槲覀儾恢辣容^兩個元素的類型,const表示只比較,不修改?。?!

(1)main函數(shù)中參數(shù)的選擇
int main()
{int arr[10] = {9,8,7,6,5,4,3,2,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubblesort(arr, sz, sizeof(arr[0]), cmp_int);
    print_arr(arr, sz);
}

這里的bubblesort傳參就和qsort傳參原理一致!

(2)bubblesort函數(shù)的實(shí)現(xiàn)原理
void bubblesort(void* base, int num, int width, int (*cmp)(const void* e1, const void* e2))
{int i = 0;
    for (i = 0; i< num - 1; i++)
    {int j = 0;
        for (j = 0; j< num - 1 - i; j++)
        {
        }
    }
}

bubblesort實(shí)現(xiàn)和簡單冒泡排序?qū)崿F(xiàn)原理一樣,只是把原來的sz改成了num。
第二個for循環(huán)里面會有所不同

int j = 0;
        for (j = 0; j< num - 1 - i; j++)
        {if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) >0)
            {
            }
        }

bubblesort最后一個參數(shù)是函數(shù)指針,通過cmp就可以把cmp中第一個參數(shù)base+j*width和第二個參數(shù)base+(j+1)*width進(jìn)行比較,此時j=0;訪問的兩個元素即為第一個元素和第二個元素,如果對文字有誤解可以觀看圖文解釋!
在這里插入圖片描述總的來說,隨著j的增長,會不斷訪問兩個相鄰的元素!

(3)比較函數(shù)的實(shí)現(xiàn)

既然我們知道了通過cmp可以找到相鄰兩個元素,那么我們就來實(shí)現(xiàn)比較函數(shù)!

int cmp_int(const void* e1, const void* e2)
{return (*(int*)e1 - *(int*)e2);
}

此時e1和e2兩個形式參數(shù)傳過來的就是9和8
把他們強(qiáng)制類型轉(zhuǎn)換為int類型之后再進(jìn)行比較(直接減法,return返回后和0進(jìn)行比較)

(4)交換函數(shù)的實(shí)現(xiàn)
if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) >0)
            {//交換函數(shù)
                Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
            }

交換函數(shù)的參數(shù)和比較函數(shù)的參數(shù)一樣,這里就不多介紹!重點(diǎn)是交換函數(shù)的實(shí)現(xiàn)過程!

void Swap(char* buf1, char* buf2, int width)
{int i = 0;
    for (i = 0; i< width; i++)
    {char tmp = *buf1;
        *buf1 = *buf2;
        *buf2 = tmp;
        buf1++;
        buf2++;
    }
}

目前我的編譯器是小端存儲,如下圖:
在這里插入圖片描述

(5)打印函數(shù)的實(shí)現(xiàn)

這個模塊相對來說簡單一些

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

總結(jié)

以上就是今天要和大家分享的內(nèi)容,兩種冒泡排序的實(shí)現(xiàn)原理
日后還會為大家?guī)頂?shù)據(jù)結(jié)構(gòu)、c++STL的知識,希望大家可以多多關(guān)注
這篇文章是原著,如果有哪里不對的地方,多多指教?。?!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文標(biāo)題:【C語言深度解剖】冒泡排序你那些不知道的問題!-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/dssjsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部