成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

禹州網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,禹州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為禹州千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的禹州做網(wǎng)站的公司定做!文章目錄
  • C語(yǔ)言在實(shí)現(xiàn)冒泡排序時(shí)出現(xiàn)的問(wèn)題
  • 前言
  • 一、冒泡排序是什么?
  • 二、使用步驟
    • 1.簡(jiǎn)單冒泡排序
    • 2.高級(jí)冒泡排序(針對(duì)于所有排序)
    • (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ù)地走訪過(guò)要排序的元素列,依次比較兩個(gè)相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯(cuò)誤就把他們交換過(guò)來(lái)。走訪元素的工作是重復(fù)地進(jìn)行,直到?jīng)]有相鄰元素需要交換,也就是說(shuō)該元素列已經(jīng)排序完成。


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

一、冒泡排序是什么?

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

二、使用步驟 1.簡(jiǎn)單冒泡排序

代碼如下(示例):

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ǎn)單的冒泡排序具有一定的局限性,它無(wú)法對(duì)字符串或者結(jié)構(gòu)體成員進(jìn)行排序,所以接下來(lái)我為大家講解高級(jí)冒泡排序?。?!

2.高級(jí)冒泡排序(針對(duì)于所有排序)

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

這個(gè)就是qsort的函數(shù)參數(shù)(MSDN獲取),在四個(gè)參數(shù)中,第一個(gè)參數(shù)用指針void*來(lái)接受,即它可以表示任意類(lèi)型的數(shù)組!二三參數(shù)分別表示元素個(gè)數(shù)和元素一個(gè)的寬度!最后一個(gè)參數(shù)較為復(fù)雜,下文會(huì)有詳解!
以qsort庫(kù)函數(shù)參數(shù)為例,可以對(duì)BubbleSort函數(shù)參數(shù)全面改造一下


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

可能會(huì)有同學(xué)問(wèn)為什么左后一個(gè)參數(shù)里面是void* e1和void* e2
因?yàn)槲覀儾恢辣容^兩個(gè)元素的類(lèi)型,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)和簡(jiǎn)單冒泡排序?qū)崿F(xiàn)原理一樣,只是把原來(lái)的sz改成了num。
第二個(gè)for循環(huán)里面會(huì)有所不同

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

bubblesort最后一個(gè)參數(shù)是函數(shù)指針,通過(guò)cmp就可以把cmp中第一個(gè)參數(shù)base+j*width和第二個(gè)參數(shù)base+(j+1)*width進(jìn)行比較,此時(shí)j=0;訪問(wèn)的兩個(gè)元素即為第一個(gè)元素和第二個(gè)元素,如果對(duì)文字有誤解可以觀看圖文解釋?zhuān)?br />在這里插入圖片描述總的來(lái)說(shuō),隨著j的增長(zhǎng),會(huì)不斷訪問(wèn)兩個(gè)相鄰的元素!

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

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

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

此時(shí)e1和e2兩個(gè)形式參數(shù)傳過(guò)來(lái)的就是9和8
把他們強(qiáng)制類(lèi)型轉(zhuǎn)換為int類(lèi)型之后再進(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)過(guò)程!

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++;
    }
}

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

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

這個(gè)模塊相對(duì)來(lái)說(shuō)簡(jiǎ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)原理
日后還會(huì)為大家?guī)?lái)數(shù)據(jù)結(jié)構(gòu)、c++STL的知識(shí),希望大家可以多多關(guān)注
這篇文章是原著,如果有哪里不對(duì)的地方,多多指教!??!

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

網(wǎng)站名稱(chēng):【C語(yǔ)言深度解剖】冒泡排序你那些不知道的問(wèn)題!-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://jinyejixie.com/article36/dssjsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、搜索引擎優(yōu)化電子商務(wù)、企業(yè)建站、服務(wù)器托管、網(wǎng)站營(yíng)銷(xiāo)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)