目錄:
一、 qsort 函式介紹
二、qsort的四個引數解讀
三、qsort函式具體例子:
這篇之前發過了,介于許多小伙伴反饋的排版問題,現已將此排版重發了
一、 qsort 函式介紹
qsort是庫函式要引頭檔案#include<stdlib.h>
引數形式: qsort(arr,sz,sizeof(arr[0]),my_cmp);
二、qsort的四個引數解讀
第一個引數:是起始位置(一般用陣列名)
第二個引數:是陣列有多少個元素,一般用int=sz=sizeof(arr)/sizeof(sizeof(arr[0]);sizeof(陣列
名)求出陣列的大小,單位是位元組,sizeof(arr[0])這是求出第一個的大小,事實上求陣列中的哪一
個元素都可以,因為陣列是一類相同型別的集合,所以他們相除算出的是陣列元素個數,
第三個引數:是陣列每個元素的大小,也可以用sizeof(陣列的型別)來計算,
第四個引數:是函式的排列比較,就是寫一個比較函式,這個函式的形式是
int(const void* a,const void* b);
其中void*他是不確定型別的指型別的指標,可以接受任意型別變數的地址,
如int a=10;void* p=&a;char b='w';void* pa=&b;但是對于void型別的指標,因為他不確定型別,所
以對他進行++ --都是錯誤的操作,比如上述p++、pa++,P--等都是err寫法,因為型別不確定導致
程式不知道向前或向后訪問幾個位元組(int向后訪問4位元組,char向后訪問1位元組),
三、qsort函式具體例子:
#include<stdlib.h>
#include<stdio.h>
int int_cmp(const void* a,const void* b) //函式實作*
{
return *(int *)a-(int*)b;
}//升序
//其中(int),為將void強制轉化(int)
//return (int*)b-(int)a;//降序
int main( ) //整形排序
{
int arr[]={1,3,4,5,6,9,7,8,0,2};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr,sz,sizeof(int),int_cmp);
int i=0;
for(i=0;i<sz;i++)
{
printf("%d ",*(arr+i));//列印每一個元素*(arr+i)等價于arr[i]
}
return 0;
}
排浮點數的例子
#include<stdlib.h>
#include<stdio.h>
int float_cmp(const void* a, const void* b) //函式實作*
{
return(int)((float*)a -(float*)b);
}//升序
//其中(int),為將void強制轉化(int)
//return(int) ((float*)b-(float*)a);//降序
int main() //float排序
{
float arr[] = { 1.0, 3.0, 4.0, 5.0, 6.0, 9.0, 7.0, 8.0, 0.0, 2.0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(float), float_cmp);
int i = 0;
for (i = 0; i<sz; i++)
{
printf("%f ", *(arr + i));//列印每一個元素*(arr+i)等價于arr[i]
}
return 0;
}
期待各位大佬批評指正
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298372.html
標籤:其他
上一篇:快速傅里葉變換
