當前位置:首頁 » 編程語言 » 函數方式實現排序C語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

函數方式實現排序C語言

發布時間: 2022-08-16 06:02:18

c語言:輸入5個數,用調用函數的方法,從小到大排序 用簡單點的

#include<stdio.h>

voidsort(float*a,intn)

{

inti,j,tmp;

for(i=0;i<n-1;i++)

for(j=0;j<n-i-1;j++)

if(a[j]>a[j+1])

{

tmp=a[j];

a[j]=a[j+1];

a[j+1]=tmp;

}

}

voidmain()

{

floata[5];

inti;

printf("請輸入五個數(逗號隔開):");

scanf("%f,%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3],&a[4]);

sort(a,5);

printf("排序後為:");

for(i=0;i<5;i++)

printf("%.2f",a[i]);

printf(" ");

}

或者三個數的。

void sort(int *a, int *b, int *c)

{

int tmp;

if(*a>*b){

tmp = *b;

*b = *a;

*a = tmp;

}

if(*a>*c){

tmp = *c;

*c = *a;

*a = tmp;

}

if(*b>*c){

tmp = *c;

*c = *b;

*b = tmp;

}

return;

}

(1)函數方式實現排序C語言擴展閱讀:

C語言中沒有預置的sort函數。如果在C語言中,遇到有調用sort函數,就是自定義的一個函數,功能一般用於排序。

一、可以編寫自己的sort函數。
如下函數為將整型數組從小到大排序。void sort(int *a, int l)//a為數組地址,l為數組長度。

{

int i, j;

int v; //排序主體

for(i = 0; i < l - 1; i ++)

for(j = i+1; j < l; j ++)

{

if(a[i] > a[j])//如前面的比後面的大,則交換。

{

v = a[i];

a[i] = a[j];

a[j] = v;

}

}

}

對於這樣的自定義sort函數,可以按照定義的規范來調用。

二、C語言有自有的qsort函數。
功 能: 使用快速排序常式進行排序。頭文件:stdlib.h
原型:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

參數:

1、待排序數組首地址。

2、數組中待排序元素數量。

3、各元素的佔用空間大小4 指向函數的指針,用於確定排序的順序,這個函數必須要自己寫比較函數,即使要排序的元素是int,float一類的C語言基礎類型。

② C語言如何用自定義函數進行字元排序

void fun(char a[])
{ int k=0,i,j;
char t;
while(a[k])
k++;//計算字元串長度
for(i=0;i<k;i++)//冒泡排序
for(j=0;j<k-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;}
}

③ 在C語言中,如何用函數實現,用選擇法對10個數進行排序

//選擇 void sort1(int *a,int n){ for(int i=0;i<n-1;i++) for(int j=i;j<n;j++) if(a[i]>a[j]) sp(a[i],a[j]);}//冒泡 void sort2(int *a,int n){ for(int i=1;i<n-1;i++) for(int j=0;j<n-i;j++) if(a[j]>a[j+1]) sp(a[j],a[j+1]); }//插入 void sort(int* a,int n) { int temp,int item; for (int i=1;i<n;i++) { temp=a[i]; item=i-1; while (item>=0&&a[item]>temp) { a[item+1]=a[item]; item--; } a[item+1]=temp; }} //快速排序 void q(int *a,int left,int right){ int i=left; int j=right; int mid=a[(i+j)/2]; while(i<=j) { while((i<right)&&(a[i]>mid)) i++; while((j>left)&&(a[j]<mid)) j--; if(i<=j) { sp(a[i],a[j]); i++;j--; } } if(i<right) q(a,i,right); if(j>left) q(a,left,j); } void sort3(int *a, int n){ q(a,0,n-1); }//雙向冒泡 絕對由於單向冒泡 原因很簡單如果數組前面或者後面排好那麼就很明顯表現出差距void sort(int* a,int n) { int left=0,right=n-2,t;do {for (int i=left;i<=right;i++){if (a[i]<a[i+1]){swap(a[i],a[i+1]);t=i;}}right=t-1;for ( i=right;i>=left;i--){if(a[i]<a[i+1]){swap(a[i],a[i+1]);t=i;}}left=t+1;} while (left<=right);} const int arrsize=10;int main(){ int a[arrsize]; for(int i=0;i<arrsize;i++) cin>>a[i]; /////////////////////////////////在這行加入所對應的函數可以驗證 for(int i=0;i<arrsize;i++) cout<<a[i]<<" "; system("pause"); return 0;} http://asp.52725.com/lly880212/blog/item/855cd1eed98ce4e7ce1b3ec5.html

④ 如何用函數實現三個數的排序(用的是C語言)

void change(int* a,int *b)
{
int temp = a>b?a:b;
return;

}
調用函數確實不能修改原參數的值,其實質是拷貝了一份實參給形參,在這種情況下,C語言是用指向實參的指針來修改實參的,C++可以還用引用,就是第一個回答你問題的那個方法。你說書上說可以用全局變數,這個當然可以,但是,絕不推薦用全局變數或者靜態變數,這是一個很不好的編程習慣!望採納

⑤ C語言sort函數如何使用

C語言中沒有預置的sort函數。如果在C語言中,遇到有調用sort函數,就是自定義的一個函數,功能一般用於排序。

一、可以編寫自己的sort函數。

如下函數為將整型數組從小到大排序。

voidsort(int*a,intl)//a為數組地址,l為數組長度。

{

inti,j;

intv;

//排序主體

for(i=0;i<l-1;i++)

for(j=i+1;j<l;j++)

{

if(a[i]>a[j])//如前面的比後面的大,則交換。

{

v=a[i];

a[i]=a[j];

a[j]=v;

}

}}

對於這樣的自定義sort函數,可以按照定義的規范來調用。

二、C語言有自有的qsort函數。

功 能: 使用快速排序常式進行排序

頭文件:stdlib.h

原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

參數:

1 待排序數組首地址

2 數組中待排序元素數量

3 各元素的佔用空間大小

4 指向函數的指針,用於確定排序的順序

這個函數必須要自己寫比較函數,即使要排序的元素是int,float一類的C語言基礎類型。

以下是qsort的一個例子:

#include<stdio.h>

#include<stdlib.h>

intcomp(constvoid*a,constvoid*b)//用來做比較的函數。

{

return*(int*)a-*(int*)b;

}

intmain()

{

inta[10]={2,4,1,5,5,3,7,4,1,5};//亂序的數組。

inti;

qsort(a,n,sizeof(int),comp);//調用qsort排序

for(i=0;i<10;i++)//輸出排序後的數組

{

printf("%d ",array[i]);

}

return0;

}

(5)函數方式實現排序C語言擴展閱讀:

sort函數的用法(C++排序庫函數的調用)

對數組進行排序,在c++中有庫函數幫我們實現,這們就不需要我們自己來編程進行排序了。

(一)為什麼要用c++標准庫里的排序函數

Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間復雜度為n*log2(n),執行效率較高!

(二)c++標准庫里的排序函數的使用方法

I)Sort函數包含在頭文件為#include<algorithm>的c++標准庫中,調用標准庫里的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!

II)Sort函數有三個參數:

(1)第一個是要排序的數組的起始地址。

(2)第二個是結束的地址(最後一位要排序的地址的下一地址)

(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。

Sort函數使用模板:

Sort(start,end,排序方法)

下面就具體使用sort()函數結合對數組里的十個數進行排序做一個說明!

例一:sort函數沒有第三個參數,實現的是從小到大

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

int a[10]={9,6,3,8,5,2,7,4,1,0};

for(int i=0;i<10;i++)

cout<<a[i]<<endl;

sort(a,a+11);

for(int i=0;i<10;i++)

cout<<a[i]<<endl;

return 0;

}

編譯器

GCC,GNU組織開發的開源免費的編譯器

MinGW,Windows操作系統下的GCC

Clang,開源的BSD協議的基於LLVM的編譯器

Visual C++:: cl.exe,Microsoft VC++自帶的編譯器

集成開發環境

CodeBlocks,開源免費的C/C++ IDE

CodeLite,開源、跨平台的C/C++集成開發環境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

Hello World

⑥ 用C語言編寫函數,要實現快速排序演算法或者冒泡法

冒泡法排序函數如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)/*共進行n-1輪*/
for(j=0;j<n-1-i;j++)/*每輪在前n-i個數中比較*/
if(a[j]>a[j+1]) /*若相鄰元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交換*/
}

void sort(int *a, int left, int right)
{
if(left >= right)/*如果左邊索引大於或者等於右邊的索引就代表已經整理完成一個組了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j) /*控制在當組內尋找一遍*/
{
while(i < j && key <= a[j])
/*而尋找結束的條件就是,1,找到一個小於或者大於key的數(大於或小於取決於你想升
序還是降序)2,沒有符合條件1的,並且i與j的大小沒有反轉*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個這樣的數後就把它賦給前面的被拿走的i的值(如果第一次循環且key是
a[left],那麼就是給key)*/
while(i < j && key >= a[i])
/*這是i在當組內向前尋找,同上,不過注意與key的大小關系停止循環和上面相反,
因為排序思想是把數往兩邊扔,所以左右兩邊的數大小與key的關系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當在當組內找完一遍以後就把中間數key回歸*/
sort(a, left, i - 1);/*最後用同樣的方式對分出來的左邊的小組進行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
/*當然最後可能會出現很多分左右,直到每一組的i = j 為止*/
}

⑦ 編寫函數,使用選擇排序法對數組進行排序(用C語言)

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

intmain(void)
{
inta[10],i,j,tmp,b;
srand(time(NULL));
for(i=0;i<10;i++)
a[i]=rand()%100;
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
for(i=0;i<9;i++)
{
tmp=i;
for(j=i+1;j<10;j++)
{
if(a[tmp]>a[j])
tmp=j;
}
if(i!=tmp)
{
b=a[tmp];
a[tmp]=a[i];
a[i]=b;
}
}
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
return0;
}


隨機產生數組中的元素, 更合理一些。 網路中有各種版本。

⑧ C語言如何用調用函數的方法把5個數字從小到大排序

1、在開頭處定義了兩個指針變數point_1和point_2。但此時他們並未指向任何一個變數,只是提供兩個指針變數,規定他們可以指向整形變數,至於指向哪一個整形變數,要在程序語句中指定。程序第6,7兩行的作用就是使point_1指向a,point_2指向b,此時point_1的值為&a(即a的地址),point_2的值為&b。

2、第10行輸出*point_1和*point_2的值,其中的「*」表示「指向」。*point_1表示「指針變數point_1所指向的變數」,也就是變數a。*point_2表示「指針變數point_2所指向的變數」,也就是變數b。從運行結果來看他們也就是100和10.

3、程序中有兩處出現*point_1和*point_2,但是兩者含義不同。程序第5行的*point_1和*point_2表示定義兩個指針變數*point_1和*point_2。它們前面的「*」只是表示該變數是指針變數。程序最後10行中的printf函數中的*point_1和*point_2則表示指針變數point_1和point_2所指向的變數。

⑨ 如何用函數實現三個數的排序(用的是C語言)

一:全局變數

#include<stdio.h>

inta,b,c;//定義三個全局變數

voidsort()//不需要參數
{
intt;
if(a>b)
{
t=a;a=b;b=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
if(a>b)
{
t=a;a=b;b=t;
}
}

intmain()
{
printf("輸入:");
scanf("%d%d%d",&a,&b,&c);
sort();
printf("排序:%d<%d<%d ",a,b,c);
return0;
}

⑩ c語言怎麼用自定義函數排序

#include <stdio.h>
#include <string.h>#define NUM 3
struct student
{
char name[20]; /*姓名*/
long num; /*12位學號*/
double sum; /*總分*/
};
void Create_Students(struct student stu[NUM])
{
struct student *p;
printf("請輸入學生姓名 學號(12位) 總分:\n");
for( p = stu; p <stu+NUM; p++)
{
scanf("%s %d %lf",p->name,&p->num,&p->sum); }
}
void Order_Students(struct student stu[NUM])//起泡法
{
int i,j;
struct student temp;
for(i=NUM-1;i>=0;i--)
for(j=0;j<i;j++)
if(stu[j].sum<stu[j+1].sum)
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1]=temp;
}
}
void main()
{
int i=1;
struct student *p;
struct student stu[NUM];
Create_Students(stu);
Order_Students(stu);
printf("%-20s %-13s %-6s %4s\n","姓名","學號(12位)","總成績","名次");
for(p=stu;p<stu+NUM;p++,i++)
{
printf("%-20s %-13.0d %-8.2f %2d\n",p->name,p->num,p->sum,i);
}
}//你參考參考,嘿