1. 程式人生 > >函式指標作為函式引數,實現氣泡排序的升序排序和降序排序

函式指標作為函式引數,實現氣泡排序的升序排序和降序排序

#include<stdio.h>

#define N 10//定義陣列元素個數
int Ascending(int a,int b);//升序排列的函式宣告
int Descending(int a,int b);//降序排列的函式宣告
void swap(int*,int*);//交換資料的函式宣告
void BubbleSort(int a[],int n,int (*compare)(int,int));//宣告排序函式,通過函式指標作為函式呼叫
void Display(int a[],int n);//輸出陣列元素的函式宣告
void main()
{
	int a[N]={12,34,21,46,89,54,26,8,6,17};
	int flag;
	while(1)
	{
		printf("輸入1:從小到大排序。\n輸入2:從大到小排序\n輸入3:退出!\n");
		scanf("%d",&flag);
		switch(flag)
		{
		case 1:
			printf("排序前的資料為:");
            Display(a,N);
			BubbleSort(a,N,Ascending);//從小到大排序,將函式作為引數傳遞
			printf("從小到大排列後的資料為:");
			Display(a,N);
			break;
		case 2:
            printf("排序前的資料為:");
            Display(a,N);
			BubbleSort(a,N,Descending);//從大到小排序,將函式作為引數傳遞
			printf("從大到小排列後的資料為:");
			Display(a,N);
			break;
		case 3:
			return;
			break;
		default:
			printf("輸入資料不合法,請重新輸入。\n");
			break;
		}
	}
}
//氣泡排序,將函式作為引數傳遞,判斷是從小到大還是從大到小排序
void BubbleSort(int a[],int n,int(*compare)(int,int))
{
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-1;j++)
			if((*compare)(a[j],a[j+1]))
				swap(&a[j],&a[j+1]);
	}
}
//交換陣列的元素
void swap(int *a,int *b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}
//判斷相鄰資料的大小,如果前者大,升序排列需要交換
int Ascending(int a,int b)
{
	if(a>b)
		return 1;
	else
		return 0;
}
//判斷相鄰資料的大小,如果前者大,降序排列需要交換
int Descending(int a,int b)
{
	if(a<b)
		return 1;
	else
		return 0;
}
void Display(int a[],int n)//輸出資料元素
{
    int i;
	for(i=0;i<n;i++)
		printf("%5d",a[i]);
	printf("\n");
}

程式執行結果


相關推薦

函式指標作為函式引數實現氣泡排序升序排序排序

#include<stdio.h> #define N 10//定義陣列元素個數 int Ascending(int a,int b);//升序排列的函式宣告 int Descendin

函式指標作為函式引數函式作為函式引數

轉載於:http://blog.csdn.net/vlily/article/details/7244682 轉載於:http://blog.csdn.net/shengnan_wu/article/details/8116935 轉載於:http://blog.csdn.net/callm

函式指標作為函式引數

指向函式的指標變數 作為函式的形式引數時,可以把相應函式的入口地址作為實參傳遞給函式。當函式指標所指向的目標不同時,在函式中就可以呼叫不同的函式,且不需要對函式體作任何修改。# include <

C語言之最好理解的通過函式指標作為引數實現回撥函式

1、函式指標回撥解釋 回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式 2、程式碼實現 #i

c語言的一級指標二級指標作為函式引數連結串列malloc中的分配等等總結

主要內容: 1、一級指標和二級指標 2、函式指標傳遞的例子 3、什麼時候需要傳遞二級指標? 4、二級指標在連結串列中的使用 1、一級指標和二級指標 一級指標:即我們一般說的指標,就是記憶體地址; 二級指標:指向指標的指標,就是地址的地址; 如: int a=

指標作為函式引數不能改變實參指標變數的值從而改變實參值

如題,這是因為 :1,按值傳遞,在呼叫函式的時候,將指向資料的指標實參傳遞到呼叫函式的形參中去2,單向傳遞,形參中的指標子函式改變地址後不能傳給主調函式,變數同樣指向了我們希望處理的資料,然後對形參的指標變數指向的資料進行各種希望的處理,在呼叫函式執行完成後,各個形參指標變數

指標作為函式引數指標訪問字元陣列元素06(C)

編寫一個函式,查詢字串s1 中是否包含字串 s2,並返回找到的第一個子串的起始位置,如果 s1 中沒有 s2, 則返回-1。編寫程式測試該函式。例如: s1: abcdefghdef, s2: def。則函式返回第一個 def 的起始位置: 3。   /*=======

C++ 有關指標作為函式引數的問題自定義記憶體分配函式傳遞二級指標的問題

如題所示,我們主要討論在自定義的記憶體分配函式中通常見到的程式碼如下所示: ``` void Create(A** addr); ``` 其中傳遞的引數是二級指標。為什麼? 我們先看一下完整的動態記憶體分配函式的簡單例子: ``` struct A { int a = 0; int b = 0

使用可變引數實現函式函式引數的平均值

使用可變引數,實現函式,求函式引數的平均值 程式程式碼如下: #include <stdio.h> #include <stdarg.h> int Average(int n, ...) { va_list arg;

C語言指標作為函式引數傳遞學習(一)

1. 一維指標做函式引數 傳入的指標為NULL 比如下面的例子,很多人都會理解錯: #include <stdio.h> void test(char *string) { string = "hello world"; } int main() { cha

函式指標作為某個函式引數及定義函式指標(回撥函式

轉載於:http://blog.csdn.net/vlily/article/details/7244682 轉載於:http://blog.csdn.net/shengnan_wu/article/details/8116935 轉載於:http://blog.csdn

指標作為函式引數 進行記憶體釋放 並置NULL

author:張繼飛 寫在前面,前面寫了程式碼封裝free函式,但是呼叫封裝並退出後,指標並不為NULL,導致接下來以此作為判斷條件的時候就出現問題了。先前封裝函式為void _free_p_(void *ptr),通過分析,指標作為函式引數傳遞時只是傳遞了指標所指向的地址,將其賦給一個

一級指標二級指標作為函式輸出形參的正確使用方法

/*data:20181218 /*  * 一級指標函式輸出形參的正確使用方法: *1)用於將函式內部的地址拷貝到函式外部已經分配的地址,有兩種做法,參照test_demo_has_no_ininer_static()和test_demo_has_local_var(),經過程式碼

函式指標作為某個函式引數

   函式指標變數是一個變數,可以作為某個函式的引數來使用的。     一個例項: 設計一個 CallMyFun 函式,這個函式可以通過引數中的函式指標值不同來分別呼叫 MyFun1、MyFun2、MyFun3 這三個函式(注:這三個函式的定義格式應相同)。  點選(此處)摺疊或開啟 #inc

c++之指標作為函式引數傳遞的問題

轉自:http://blog.csdn.net/fjb2080/article/details/5623427   原創文章,轉載請註明出處,謝謝! 作者:清林,部落格名:飛空靜渡   部落格地址:http://blog.csdn.net/fjb2080 &n

使用main函式引數實現一個整數計算器

使用main函式的引數,實現一個簡單的整數計算器,具有整數加,減,乘,除運算的功能。 首先,我們先來看一下main函式引數是什麼。 main函式有兩種形式: 1. int main(i

指標作為函式引數傳遞 (轉載)

這幾天在學習C過程中,在使用指標作為函式引數傳遞的時候出現了問題,根本不知道從何得解:原始碼如下:    createNode(BinNode *tree,char *p)    {        tree = (BinNode *) malloc(sizeof(BinNo

C++用指向函式指標作為函式引數

示例: #include <iostream> using namespace std; int add(int x, int y){ return x + y; } int sub(int x, int y){ return x - y; } int opera

指標作為函式引數(處理陣列的四種方式)

//陣列名傳遞給指標子引數 #include <stdio.h> #define N 3 float average(float * g); int main() { float grade[N]={60,75,80}; printf("學生的平均成

作為一個c++而非c程式設計師該棄函式指標函式物件了

我想把mqtt的c庫封裝為符合面向物件的形式,其中有個函式是 DLLExport int MQTTClient_setCallbacks(MQTTClient handle, void* context, MQTTClient_connectionLost* cl,