指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)

內容:
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
回顧:
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
七,指向函數指針數組的指針
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
八,回調函數
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
print函數就是這個回調函數
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
qsort函數
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
冒泡排序
思路:
相鄰兩個元素比較,交換
一趟冒泡排序後最大值必定來到相應的位置上
一共須要sz-1趟冒泡排序
每次須要比較sz-1-i次
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
代碼實現:
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
void*指針能夠接收任意一個類型的地址
可是不知道,存儲的地址所指向的變量類型
因此不能解引用操做,也不能跳空間使用
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
qsort函數的使用
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
注意:
返回值只有int類型的\<0,\>0,=0
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
強制類型轉換後便可使用解引用操做符
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
函數調用
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
總之:qsort的使用
qsort(數組名,數組的元素個數,每一個數組元素所佔的字節大小,相鄰兩數的比較函數)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
比較int類型的數據
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
比較float類型的數據
返回值只能是int類型的
注意強制類型轉換
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
或者寫爲
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
結構體中的數字類型的比較
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
結構體中的字符類型的比較
比較的是字符串
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
比較字符類型的數據
比較的是字符
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
利用回調函數模擬實現qsort函數
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)面試

#include <stdlib.h>
#include <stdio.h>

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

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

void my_qsort(void* base, int sz, int width, int(*cmp)(void* e1, void* e2))
{
    int i = 0;
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        for (j = 0; j < sz - 1 - i; j++)
        {
            if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0)//傳遞的是相鄰兩元素
            {
                swap((char*)base + j * width, (char*)base + (j + 1) * width, width);//相鄰兩元素的交換
            }
        }
    }
}
int main()
{
    int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    my_qsort(arr, sz, sizeof(arr[0]), compare_int);

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

九,數組面試題的解析
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)
指針進階(三)(詳細講解7,8,9)(零基礎學習C語言)數組

相關文章
相關標籤/搜索