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

c語言排序函數

發布時間: 2022-01-24 07:43:18

c語言排序函數與顯示函數的聯系

你思路就有問題,排序完沒有寫入文件

present()讀取的還是沒排序之前的數據

❷ c語言的排序函數

#include"stdio.h"
int main(void)
{
int a[10];
int i,j,n,temp;
printf("please input the num of the number:");
scanf("%d",&n);
printf("請輸入%d個整數:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
temp=a[i];a[i]=a[j];a[j]=temp;
}
printf("after sorted:\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
你也不說清楚點,這是我寫過的一個函數,你參考一下吧

❸ C語言 排序 函數

一群菜鳥不懂的亂說。 我把樓主的代碼改了一些,如下 #include<stdio.h>int input(int data[], int argc, int *n)
{
int i;
printf("請輸入要輸入數的個數");
scanf("%d", n);
if(*n > argc) {
printf("segment fault!");
return -1;
}
for(i = 0; i < *n; i++) {
printf("輸入的第%d個數.", i+1);
scanf("%d", data+i); //canf("%d", &data[i]);
}
printf("輸入的數是:\n");
for(i = 0; i < *n; i++) {
printf("%5d\n", data[i]);
}
return 0;
}void sort(int n, int data[])
{
int i, j, temp;
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++)
if(data[i] < data[j]) {
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
printf("排序後的結果如下:\n");
for(i = 0; i < n; i++)
printf("%5d\n", data[i]);
}int main()
{
int data[100];
int n;
if(input(data, 100, &n) == -1)
return -1;
sort(n, data);
return 0;
}
對於以上代碼,做出如下解釋:(1)C語言的參數有形參和實參的說法,形參在傳遞到函數內的時候,復制一個副本給函數,在函數內部和外部是兩個完全不同的變數,函數結束,空間也被釋放,所以不能在函數內部來改變外部的值。所以要像樓主這樣用一個函數給一個變數賦值,要用實參int input(int data[], int argc, int *n)中的int *n就是實現形式,這種辦法把n的地址傳遞給函數。當然,在調用函數的時候也同樣要傳遞地址指針類型(&n)。(2)if(*n > argc) {
printf("segment fault!");
return -1;
}這一段是我加進去的,因為按照樓主的意思,data數組的長度也要傳遞進去,但是意思何在?所以只好加了這一段,並把函數改為有類型的,以檢驗是否有數據溢出。(3)scanf("%d", data+i); //scanf("%d", &data[i]);這里我改動的主要原因是為了提升程序速度,scanf("%d", &data[i]);同樣可以運行,但是定址一次,又回頭要地址,這樣繞了一圈,沒有必要。 對於樓主提幾點建議:(1)C語言的精髓在於指針,剛才說到的實參,就是用指針的概念實現的。scanf("%d", data+i); 一行,同樣也是把數組頭指針加上偏移地址,得到所要的地址。(2)C語言編程的時候特別要注意數據的溢出,這是所有初學者頭疼的問題之一。建議在一開始就養成習慣,經常檢驗數組的邊界。(3)void main一看就知道是看潭浩強的書長大的程序員。建議我們都用int main(){ return 0; }的形式,可以看看C語言之父K&R的書。主函數的返回值是告訴操作系統,這個函數是正常退出(返回0),還是異常退出(非0,經常是-1)。(4)在做實際項目的時候,程序經常是要回頭看的,也經常是要給別人看以達到維護的目的的。除了要養成良好的文檔書寫習慣以外(學習軟體工程以後你就會掌握),還要養成良好的編程風格,這里我建議看《thinking in C++》,並按照裡面例題的風格,養成自己的習慣。

❹ C語言中的排序函數是什麼

include <cstdlib> 或 #include <stdlib.h>
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))

參數表
*base: 待排序的元素(數組,下標0起)。
num: 元素的數量。
width: 每個元素的內存空間大小(以位元組為單位)。可用sizeof()測得。
int(*)compare: 指向一個比較函數。*elem1 *elem2: 指向待比較的數據。
比較函數的返回值
返回值是int類型,確定elem1與elem2的相對位置。
elem1在elem2右側返回正數,elem1在elem2左側返回負數。
控制返回值可以確定升序/降序。

產生隨機數的函數也是rand(),不是rank().

❺ C語言字元串快速排序函數


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

typedefcharstrLINE[2000];
intstrCMP(constvoid*a,constvoid*b)
{
returnstrcmp((constchar*)a,(constchar*)b);
}
intmain(intargc,char*argv[])
{
strLINE*p;
inti,n;
scanf("%d",&n);
p=malloc(sizeof(strLINE)*n);
for(i=0;i<n;i++)scanf("%s",p[i]);

qsort(p,n,sizeof(strLINE),strCMP);

for(i=0;i<n;i++)printf("%s ",p[i]);

free(p);
return0;
}

❻ c語言數組用sort函數排序

#include<stdio.h>
#include<algorithm>
main(){
int a[10]={10,9,8,7,6,5,4,3,2,1};
std::sort(a,a+10);
for(int i=0;i<10;i++)
printf("%d\t",a[i]);}

❼ C語言編寫一個函數排序調用

#include<stdio.h>
voidsortP(intp[])
{
inti,k;
int*fir; //首位數的指針
int*cur; //當前數的指針
int*max; //最大數的指針
inttmp; //交換數字的臨時變數

fir=p;
for(i=0;i<9;i++) //10個數字,從0--9
{
max=fir; //最大值默認為第一個
cur=fir+1; //從第二個數字開始比較
for(k=i;k<10;k++) //一直到最後一個
{
if(*cur>*max)max=cur; //把最大數值的指針保存到max指針
cur++; //下一個數字
}
tmp=*fir; //把最大數字和首位的數字交換,
*fir=*max;
*max=tmp;
fir++; //比較下一個數字
}
}
intmain(void)
{
inta[10],*p;
inti;
p=a; //把指針指向數組首位
printf("請輸入10個整數:");
for(i=0;i<10;i++)
{
scanf("%d",p);
p++;
}
printf(" 排序後的10個數字是: ");
p=a; //重新把指針指向數組首位
sortP(p);
for(i=0;i<10;i++)
{
printf("%d",*p);
p++;
}
printf(" ");
return0;
}

❽ c語言 排序函數

首先這是一種快速排序的演算法,你也應該知道,快速排序就是選擇序列中的一個元素作為基準,通過循環找到這個基準最終的位置,並把所有小於這個基準的元素移到這個位置的左邊,大於基本的元素移到右邊,這樣再對這個基準的左右兩邊分別遞歸調用自己,最終就能得到排序的結果。
再來解釋一下這個例子,它選擇的基準就是v[(left+right)/2],然後將這個基準雨v[left]交換,現在假設你想從頭排序到最後,則你會將left傳個0,也就是他將這個基準和V[0]交換了,這個時候開始循環,因為第一個元素是基準,所以從第二個元素開始循環(也就是left+1),然後到if判斷部分,如果v[i]<v[left],也就是說這個時候已經至少有一個元素比基準小了,所以基準至少在v[1]或者之後了,所以他把你找到的這個比基準小的v[i]和v[++last]交換,這時候v[i]的位置已經是在基準的正確位置或者之前了,不會在基準之後的,所以這就實現了把比基準小的元素移到基準的正確位置之前,你說的【第一遍執行過程中,第8行last=left=0,那麼到了11行時相當於交換v[1]和v[0+1]】這沒有錯,確實是在自己交換自己,但是這樣並不違背前面的思路不是么?當if條件不滿足的時候,last是不會增加的,但是i會一直加1,所以last和i就會不同,這只是在將比基準小的元素移到基準之前,每有一個比基準小的,last就加1,這樣當你循環一遍之後的last值就是基準應該在的位置,而且這個時候,所有比基本小的元素也都在last之前了,這時候last位置的元素也是比基準小的,這沒關系,因為之後還有一句swap[v,last,left],到目前位置,基準的位置找到了,基準左邊的元素都比基準小,右邊都比基準大,再對基準的左右兩邊遞歸調用自己,就完成了序列的排序。

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

用冒泡排序法,代碼如下:for(j=0;j<=9;j++)
//10人的總成績進行排序
{
for
(i=0;i<10-j;i++)
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=0;i<10;i++)
//列印排序後的總分{printf("%5d",a[i]);}

❿ C語言排序函數看不懂,求教!

t=i 這句有誤,應為p=i。
這是選擇排序法。p就是循環進行到當前為止,全場最小數組元素的下標值。
比如 數組a[3],有三個元素,4 3 2
第一次,j=0,a[0]=4,p一開始為0,指向a[0]。將a[1]與a[0]比,發現a[1]更小,於是令p為1,指向a[1]。再將a[2]與a[1]比,a[2]還要小,於是令p為2,指向a[2]。如果後面還有,就繼續下去,p永遠是當前發現的最小的元素的下標。 等進行到末尾,將a[p],即這圈下來發現的最小元素,和a[0]對調。於是a[0]現在是全數組最小的元素。
第二次,a[0]可以不用管了,從a[1]開始重復上面的過程。同理,最後a[1]是剩下的數里最小的,也就是全數組第二小的元素。
第三次....