真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言快速排序函數(shù)原型 c語言中快速排序函數(shù)

用c語言編寫函數(shù)QuickSort()來實(shí)現(xiàn)快速排序

#include?stdlib.h

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供武川企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站設(shè)計(jì)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為武川眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

#include?stdio.h

#define?MAXN?8

#define?MOD?1024

void?QuickSort(int?*arr,?int?low,?int?high)

{

if?(low?=?high)?return;

//保存排序區(qū)間的?起始位置和終點(diǎn)位置

int?left?=?low,?right?=?high;

//默認(rèn)?左邊第一個(gè)元素?為標(biāo)志

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]);

//輸入是默認(rèn)為生活中習(xí)慣的數(shù)組左邊第一個(gè)為:編號(hào)1

int?s,?m;

scanf("%d?%d",?s,?m);

//轉(zhuǎn)成計(jì)算機(jī)數(shù)組第一個(gè)為:編號(hào)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

急需快速排序C語言原程序

#include

iostream.h

int

data[9]

=

{54,38,96,23,15,72,60,45,83};virus

51cto技術(shù)博客

void

quick_sort(int

data[],

int

low,

int

high){virus

51cto技術(shù)博客

int

i,

j,

pivot;virus

51cto技術(shù)博客

if

(low

high)virus

51cto技術(shù)博客

{virus

51cto技術(shù)博客

pivot=data[low];virus

51cto技術(shù)博客

i=low;

virus

51cto技術(shù)博客

j=high;virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

while(ij)virus

51cto技術(shù)博客

{virus

51cto技術(shù)博客

while

(ij

data[j]=pivot)virus

51cto技術(shù)博客

j--;virus

51cto技術(shù)博客

if(ij)virus

51cto技術(shù)博客

data[i++]=data[j];

//將比樞軸記錄小的記錄移到低端virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

while

(ij

data[i]=pivot)virus

51cto技術(shù)博客

i++;virus

51cto技術(shù)博客

if(ij)

virus

51cto技術(shù)博客

data[j--]=data[i];

//將比樞軸記錄大的記錄移到高端virus

51cto技術(shù)博客

}virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

data[i]=pivot;

//樞軸記錄移到最終位置virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

quick_sort(data,low,i-1);virus

51cto技術(shù)博客

quick_sort(data,i+1,high);virus

51cto技術(shù)博客

}virus

51cto技術(shù)博客

}virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

void

main()virus

51cto技術(shù)博客

{virus

51cto技術(shù)博客

quick_sort(data,

0,

8);virus

51cto技術(shù)博客

}virus

51cto技術(shù)博客

virus

51cto技術(shù)博客

下面是對(duì)這段程序的分析:virus

51cto技術(shù)博客

“pivot=data[low];”表示將最低端即第一個(gè)元素作為樞軸記錄,暫存到pivot中去,“while(ij)”表示當(dāng)高低指針相遇時(shí)循環(huán)終止,否則繼續(xù)?!皐hile

(ij

data[j]=pivot)

j--;”表示從高端(即數(shù)組后面)開始搜索,直到搜索到一個(gè)比樞軸值小的某個(gè)元素,條件“data[j]=pivot”用的是大于或等于號(hào),可見,在搜索過程中若遇到相等的則跳過并繼續(xù)搜索,條件“ij”不可少,因?yàn)樵谒阉鬟^程中,low與high可能相遇,此“ij”跟外層while的條件“ij”無關(guān),作用各不相同,外層while的條件“ij”是判斷在進(jìn)行從高端向低端搜索一趟、從低端向高端搜索一趟之后高低指針是否相遇,而前者卻是在單向的搜索過程中為防止高低指針相遇。virus

51cto技術(shù)博客

當(dāng)經(jīng)過“while

(ij

data[j]=pivot)

j--;”的搜索之后,搜索到一個(gè)比樞軸小的元素,因?yàn)樵谒阉魍曛骾、j可能相等,若相等,就沒有交換的必要,因此緊接下面設(shè)置了一個(gè)判斷“if(ij)”,若成立,那么就要將比樞軸記錄小的記錄移到低端“data[i++]=data[j];”,這里的“data[i++]”表示先使用了data[i]之后才加1,相當(dāng)于“data[i]=data[j];

i++;”兩句的效果。為什么要i++?是因?yàn)閯偨粨Q的記錄肯定比樞軸小,那么緊接下面的語句“while

(ij

data[i]=pivot)”就少了一次不必要的比較(因?yàn)椋篸ata[i]=pivot必定成立,而ij在前面的if語句中已成立,則“ij

data[i]=pivot”必成立,若沒有i++,while中的““ij

data[i]=pivot””在肯定成立的情況下執(zhí)行了一次),提高了效率。執(zhí)行“data[i++]=data[j];”之后,高端的data[j]覆蓋了data[i]的值,第一次覆蓋時(shí),覆蓋的是data[low]的值,因?yàn)樽铋_始時(shí),“pivot=data[low];”將最低端即第一個(gè)元素作為樞軸記錄暫存到pivot中去了,所以不必?fù)?dān)心,會(huì)丟失信息,由于data[j]的值賦給了data[i],那么data[j]原來的位置j就可以看做一個(gè)空白,下一次覆蓋時(shí),就將低端的data[i]復(fù)制到這個(gè)位置。virus

51cto技術(shù)博客

緊接下來的“while

(ij

data[i]=pivot)

i++;”是從低端向高端搜索,直到找到一個(gè)比樞軸大的元素,先進(jìn)行判斷“if(ij)”,若成立,如前所述,執(zhí)行“data[j--]=data[i];”就將低端的data[i]復(fù)制到上次賦值后空出的j位置。virus

51cto技術(shù)博客

如此反復(fù),直到外層while的條件不成立,即i==j,即高低指針相遇,表示已經(jīng)找到了樞軸記錄pivot的最終位置i,執(zhí)行“data[i]=pivot;”于是,樞軸記錄移到最終位置。接下來的“quick_sort(data,low,i-1);

quick_sort(data,i+1,high);”表示,對(duì)被pivot分開的左右子序列進(jìn)行遞歸的快速排序。virus

51cto技術(shù)博客

C語言sort函數(shù)如何使用

C語言中沒有預(yù)置的sort函數(shù)。如果在C語言中,遇到有調(diào)用sort函數(shù),就是自定義的一個(gè)函數(shù),功能一般用于排序。

一、可以編寫自己的sort函數(shù)。

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

void?sort(int?*a,?int?l)//a為數(shù)組地址,l為數(shù)組長度。

{

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;

}

}}

對(duì)于這樣的自定義sort函數(shù),可以按照定義的規(guī)范來調(diào)用。

二、C語言有自有的qsort函數(shù)。

功 能: 使用快速排序例程進(jìn)行排序

頭文件:stdlib.h

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

參數(shù):

1 待排序數(shù)組首地址

2 數(shù)組中待排序元素?cái)?shù)量

3 各元素的占用空間大小

4 指向函數(shù)的指針,用于確定排序的順序

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

以下是qsort的一個(gè)例子:

#includestdio.h

#includestdlib.h

int?comp(const?void*a,const?void*b)//用來做比較的函數(shù)。

{

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

}

int?main()

{

int?a[10]?=?{2,4,1,5,5,3,7,4,1,5};//亂序的數(shù)組。

int?i;

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

for(i=0;i10;i++)//輸出排序后的數(shù)組

{

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

}

return?0;

}

擴(kuò)展資料:

sort函數(shù)的用法(C++排序庫函數(shù)的調(diào)用)

對(duì)數(shù)組進(jìn)行排序,在c++中有庫函數(shù)幫我們實(shí)現(xiàn),這們就不需要我們自己來編程進(jìn)行排序了。

(一)為什么要用c++標(biāo)準(zhǔn)庫里的排序函數(shù)

Sort()函數(shù)是c++一種排序方法之一,學(xué)會(huì)了這種方法也打消我學(xué)習(xí)c++以來使用的冒泡排序和選擇排序所帶來的執(zhí)行效率不高的問題!因?yàn)樗褂玫呐判蚍椒ㄊ穷愃朴诳炫诺姆椒?,時(shí)間復(fù)雜度為n*log2(n),執(zhí)行效率較高!

(二)c++標(biāo)準(zhǔn)庫里的排序函數(shù)的使用方法

I)Sort函數(shù)包含在頭文件為#includealgorithm的c++標(biāo)準(zhǔn)庫中,調(diào)用標(biāo)準(zhǔn)庫里的排序方法可以不必知道其內(nèi)部是如何實(shí)現(xiàn)的,只要出現(xiàn)我們想要的結(jié)果即可!

II)Sort函數(shù)有三個(gè)參數(shù):

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

(2)第二個(gè)是結(jié)束的地址(最后一位要排序的地址的下一地址)

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

Sort函數(shù)使用模板:

Sort(start,end,排序方法)

下面就具體使用sort()函數(shù)結(jié)合對(duì)數(shù)組里的十個(gè)數(shù)進(jìn)行排序做一個(gè)說明!

例一:sort函數(shù)沒有第三個(gè)參數(shù),實(shí)現(xiàn)的是從小到大

#includeiostream

#includealgorithm

using namespace std;

int main()

{

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

for(int i=0;i10;i++)

couta[i]endl;

sort(a,a+11);

for(int i=0;i10;i++)

couta[i]endl;

return 0;

}

編譯器

GCC,GNU組織開發(fā)的開源免費(fèi)的編譯器

MinGW,Windows操作系統(tǒng)下的GCC

Clang,開源的BSD協(xié)議的基于LLVM的編譯器

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

集成開發(fā)環(huán)境

CodeBlocks,開源免費(fèi)的C/C++ IDE

CodeLite,開源、跨平臺(tái)的C/C++集成開發(fā)環(huán)境

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

C-Free

Light Table

Visual Studio系列

Hello World

參考資料:百度百科-sort函數(shù)


本文題目:c語言快速排序函數(shù)原型 c語言中快速排序函數(shù)
文章地址:http://weahome.cn/article/ddohihh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部