自定義一個比較函數(shù),直接調用快排庫函數(shù)qsort即可。舉例如下:
十多年的南豐網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整南豐建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“南豐網站設計”,“南豐網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"stdlib.h"
#include?"time.h"
struct?ln{
int?data,score,math;
}ss[100];
int?mycmp(const?void?*a,?const?void?*b){//自定義比較函數(shù)
return?((struct?ln*)a)-data-((struct?ln*)b)-data;//若要降序,-號前后變量交換
}//data改為score或math就可按相應要素排序
int?main(void){//測試一下……
int?i;
srand((unsigned)time(NULL));
for(i=0;i100;ss[i++].data=rand()%1000);
qsort(ss,100,sizeof(struct?ln),mycmp);
for(i=0;i100;printf("%4d",ss[i++].data));
printf("\n");
return?0;
}
函數(shù)kuaipai1 進入了無限死循環(huán)。
遞歸函數(shù)沒有一個節(jié)點判定遞歸結束,導致進入死循環(huán)
系統(tǒng)堆棧用完,程序崩潰。
程序調試報告有無限死循環(huán)危險,運行后就直接崩潰,導致棧溢出。
你可以看看這個例子:
#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;
}
#include?stdlib.h
#include?stdio.h
#define?MAXN?8
#define?MOD?1024
void?QuickSort(int?*arr,?int?low,?int?high)
{
if?(low?=?high)?return;
//保存排序區(qū)間的?起始位置和終點位置
int?left?=?low,?right?=?high;
//默認?左邊第一個元素?為標志
int?key?=?arr[low];
while?(low??high)
{
while?(low??high??arr[high]?=?key)?--high;
arr[low]?=?arr[high];
while?(low??high??arr[low]?=?key)?++low;
arr[high]?=?arr[low];
}
arr[low]?=?key;
//每次排序后都分成兩部分[left,?low)?(low,?right]
//arr[low]的位置是一定是有序的
QuickSort(arr,?left,?low?-?1);
QuickSort(arr,?low?+?1,?right);
return;
}
int?main(void)
{
int?n;
scanf("%d",?n);
int?arr[MAXN]?=?{0};
int?i;
for?(i?=?0;?i??n;?++i)
scanf("%d",?arr[i]);
//輸入是默認為生活中習慣的數(shù)組左邊第一個為:編號1
int?s,?m;
scanf("%d?%d",?s,?m);
//轉成計算機數(shù)組第一個為:編號0
s--;?m--;
//快排
QuickSort(arr,?s,?m);
//輸出
for?(i?=?s;?i?=?m;?++i)
{
printf("%d?",?arr[i]);
}
return?0;
}
//測試數(shù)據(jù)
//8
//1?2?3?4?5?6?7?8
//2?6
輸出 6 5 4 3 2
#include stdio.h
#includestdlib.h
#includestring.h
int comp(char *a,char *b)
{
while(*a==*b*a*b){a++;b++;}
return (int)*a-(int)*b;
}
int main(void)
{
char s[1000][20];
int i,n;
scanf("%d\n",n);
for(i=0;in;i++)
gets(s[i]);
qsort(s,n,sizeof(s[0]),comp);
printf("\n");
for(i=0;in;i++)
puts(s[i]);
system("pause");
return 0;
}
冒泡法排序函數(shù)如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共進行n-1輪*/
for(j=0;jn-1-i;j++)/*每輪在前n-i個數(shù)中比較*/
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的數(shù)(大于或小于取決于你想升
序還是降序)2,沒有符合條件1的,并且i與j的大小沒有反轉*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
a[left],那么就是給key)*/
while(i j key = a[i])
/*這是i在當組內向前尋找,同上,不過注意與key的大小關系停止循環(huán)和上面相反,
因為排序思想是把數(shù)往兩邊扔,所以左右兩邊的數(shù)大小與key的關系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當在當組內找完一遍以后就把中間數(shù)key回歸*/
sort(a, left, i - 1);/*最后用同樣的方式對分出來的左邊的小組進行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
/*當然最后可能會出現(xiàn)很多分左右,直到每一組的i = j 為止*/
}
分享題目:c語言自帶的快排函數(shù) c++ 快排函數(shù)
轉載來于:http://chinadenli.net/article10/hgcsdo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網頁設計公司、靜態(tài)網站、全網營銷推廣、定制網站、網站設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)