1. c語言快速排序函數怎麼調用
你可以看看這個例子:
#include <stdio.h>
#include <stdlib.h>
int list[5] = {7,5,9,2,6};
int sort_function( const void *a, const void *b);
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(int), sort_function);
for (x = 0; x < 5; x++)
printf("%d\\n", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{
if(*(int*)a>*(int*)b)
return 1;
else if(*(int*)a<*(int*)b)
return -1;
else
return 0;
}
2. c語言怎樣通過函數調用實現選擇排序法
c語言通過函數調用實現選擇排序法:
1、寫一個簡單選擇排序法的函數名,包含參數。int SelectSort(int * ListData,int ListLength);
2、寫兩個循環,在循環中應用簡單選擇插入排序:
int SelectSort(int * ListData,int ListLength)
{
int i , j ;
int length = ListLength;
for(i=0;i<=length-2;i++)
{
int k = i;
for(j=i+1;j<=length-1;j++)
{
if(ListData[k]>ListData[j])
{
k=j;
}
}
if(k!=i)
{
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
}
}
return 0;
}
4、簡單選擇排序中,需要移動的記錄次數比較少,主要的時間消耗在對於數據的比較次數。基本上,在比較的時候,消耗的時間復雜度為:n*n。
3. C語言,二路歸並排序,遞歸調用到底是怎麼調用的求詳解!
程序代碼都是順序執行的,當然是把一路調用完再做第二路調用,最後把排好序的2路進行合並;
在排序每一路的時候也是使用歸並的方式,把一路分成2路,層層深入。
理解的話,你可以這樣:
比如8個數,你從上到下豎著排成一列,然後中間一條橫線分割。
橫線上面的部分再從中間分割成2部分,2部分放在第二列;
依次往後分割。得到形如這樣的圖:
然後按照紅色箭頭先按A反推一層,再按B向下一層,這樣就會合並一次產生排好序的前一層。如此反復,這就是遞歸實際的執行流程。
4. C語言如何才能調用這個函數排序的數組
#include #include #include #define MAXlen 100 void select_sort(int *x, int n) { //選擇排序 int i, j, min; int t; for (i = 0; i < n - 1; i++) { // 要選擇的次數:0~n-2共n-1次 min = i; // 假設當前下標為i的數最小,比較後再調整 for (j = i + 1; j < n; j++) { //循環找出最小的數的下標是哪個 if (*(x + j) < *(x + min)) { min = j; // 如果後面的數比前面的小,則記下它的下標 } } if (min != i) { // 如果min在循環中改變了,就需要交換數據 t = *(x + i); *(x + i) = *(x + min); *(x + min) = t; } } } int main() { int i; int iArr[MAXlen]; srand((unsigned int)time(NULL)); printf("\n排序前:\n"); for(i = 0 ; i < MAXlen ; i++) { iArr[i] = (unsigned int)rand() % 1000; if(i % 10 == 0) printf("%\n"); printf("%5d",iArr[i]); } printf("\n"); select_sort(iArr,MAXlen); printf("\n排序後:\n"); for(i = 0 ; i < MAXlen ; i++) { if(i % 10 == 0) printf("%\n"); printf("%5d",iArr[i]); } printf("\n\n"); return 0; }
5. 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;
}
6. c語言怎樣實現快速排序
include<stdio.h>
int arr_num[];
int length;
void quick_sort(int left, int right)
{
int i, j, c, temp;
if(left>right)
return;
i= left;
j= right;
temp = arr_num[i]
while(i != j)
{
while(arr_num[j]>=temp && i<j)
{
j--;
}
while(arr_num[i]<=temp && i<j)
{
i++;
}
if(i<j)
{
c = arr_num[i];
arr_num[i] = arr_num[j];
arr_num[j] = c;
}
}
//left為起始值(參照值)此時的I為第一次排序結束的最後值,與參照值交換位置
arr_num[left] = arr_num[i];
arr_num[i] = temp;
//繼續遞歸直到排序完成
quick_sort(left, i-1);
quick_sort(i+1, right);
}
int main()
{
int i;
length = 7;
arr_num[length] = {23, 7, 17, 36, 3, 61, 49}
//快速排序調用
quick_sort(0, length-1);
//輸出排序後的結果
for(i=1;i<=length;i++)
printf("%d ",arr_num[i]);
getchar();getchar();
return 0;
}
7. C語言如何把已經錄入的學生各科成績的總成績計算出並調用去排序
要看你數據類型,用冒泡排序思路循環比較總分,交換對應各科成績:
一、比如,一個學生的各科成績用數組保存,那麼,n個學生就是二維數組。總分再定義一個一維數組用行下標將兩者對應。冒泡排序時比較總分,需交換時,兩個數組分別同時交換(行下標一樣)。
二、這種多屬性表示一個對象,定義成結構體更好,各科成績和總分都定義成學生結構體的成員變數,還可根據需求增加姓名年齡等屬性。n個學生就是結構數組,排序的時候要用總分這個成員變數來比較,交換直接用結構變數相交換。
三、對第二點升級做法,當學生人數很多且經常增刪,且人數不定,那麼把結構數組改成結構鏈表就更方便。排序時,保留結構指針的值,交換其餘成員變數。
8. 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所指向的變數。
9. C語言數據結構順序表選擇排序怎麼在主函數中調用,謝謝!
SeqList L;//L只是個默認構造,在後面執行基本是統一的0值;執行前應該設置實體數據
L=Selection(L.length);//改為L=Selection(L);原函數調用與函數定義不符,有語法錯誤;L.length是個int 類型,函數定義的參數類型是SeqList;
SeqList Selection(SeqList L) 內部邏輯不夠簡捷,多多練習;
if (L.data[j]<L.data [i]){}//可直接交換,k標志沒什麼作用。
10. 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;
}
(10)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語言基礎類型。