當前位置:首頁 » 編程語言 » c語言快速排序函數

c語言快速排序函數

發布時間: 2024-11-07 09:41:16

1. 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;
}

2. C語言快速排序代碼

#include <stdio.h>

int partions(int l[],int low,int high)
{
int prvotkey=l[low];
l[0]=l[low];
while (low<high)
{
while (low<high&&l[high]>=prvotkey)
--high;
l[low]=l[high];
while (low<high&&l[low]<=prvotkey)
++low;
l[high]=l[low];
}

l[low]=l[0];
return low;
}

void qsort(int l[],int low,int high)
{
int prvotloc;
if(low<high)
{
prvotloc=partions(l,low,high); //將第一次排序的結果作為樞軸
qsort(l,low,prvotloc-1); //遞歸調用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high); //遞歸調用排序 由 prvotloc+1到 high

}
}

void quicksort(int l[],int n)
{
qsort(l,1,n); //第一個作為樞軸 ,從第一個排到第n個
}

void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39};

for (int b=1;b<11;b++)
printf("%3d",a[b]);

printf("\n");
quicksort(a,11);

for(int c=1;c<11;c++)
printf("%3d",a[c]);

}

3. 菜鳥提問 c語言關於快速排序

其實,最想說明的是那段交換的代碼
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
一定要排除 i==j 的情況。即自己與自己交換的情況。
如:
a=9;
a^=a;/*a=0*/
a^=a;/*a=0*/
a^=a;/*a=0*/
a就不再是10了。

#include<stdio.h>
#include<stdlib.h>
void quicksort(int R[],int s,int t)
{
int i,j;
int temp;
if(s<t)
{
temp=R[s];/*選第一個數作為參照*/
/*while(i!=j)不要用這種方法判定循環結束,萬一i==j-1,i++,j--後 i〉j了,!=這個條件就救不了你了*/
for(i=s+1,j=t;i<=j;i++,j--)/*不包括參照數,進行老孫譽左右陣營站隊*/
{
while(j>i && R[j]>=temp)/*R[j]>=temp不要 = 也行,加了更好,畢竟相等的無論侍段站左站右,哪邊都無所謂*/
j--;
while(i<j && R[i]<=temp)
i++;
if(i!=j){/*i千萬不能等於j*/
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
}
}
i--;
if(R[s]<R[i])i--;/*調整i的值,使i指向最後一個小於等於凱碰參照數的位置*/
/*將參照數 與 最後一個小於等於參照數的數進行交換,這樣就真正把左右兩個陣營分開了*/
R[s]=R[i];
R[i]=temp;
quicksort(R,s,i-1);
quicksort(R,i+1,t);
}
}
int main(void)
{
int i;
int a[]={5,3,2,1,9,8,7,4,5};
quicksort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d ",*(a+i));
return 0;
}

熱點內容
csqlitelinux 發布:2024-11-23 01:51:15 瀏覽:614
c語言中提示有沒有安裝編譯器 發布:2024-11-23 01:45:28 瀏覽:350
雲上壓縮 發布:2024-11-23 01:39:56 瀏覽:819
電腦總是伺服器錯誤 發布:2024-11-23 01:39:45 瀏覽:545
伺服器卡班進不去怎麼辦 發布:2024-11-23 01:39:09 瀏覽:225
我晉升的技巧ftp 發布:2024-11-23 01:38:23 瀏覽:284
java成長 發布:2024-11-23 00:53:33 瀏覽:470
cmd5解密演算法 發布:2024-11-23 00:52:48 瀏覽:987
庫存存儲戰略 發布:2024-11-23 00:51:01 瀏覽:823
手機版我的世界基岩版起床伺服器推薦 發布:2024-11-23 00:49:29 瀏覽:838