❶ c語言的快速排序法
直接寫快排演算法的話比較吃力,不過網上是有的找的,但要熟練掌握裡面的思想不容易,如果不介意的話,你就去使用C語言自帶的庫函數qsort好了。頭文件是#include<stdlib.h>,具體的介紹網上非常詳細了。
❷ c語言快速排序
俺博客裡面有啦,參考自己寫的,不好請指教:
http://hi..com/djpangxie/blog/item/572cc9d0ee5546da562c8414.html
❸ 關於快速排序C語言演算法
//一點小問題而已,已為你改好
#include <stdio.h>
void Quick_sort (int s[], int l, int r )
{
if(l<r)
{
int i=l,j=r,x=s[l];
while(i<j)
{
while(i<j&&s[j]>=x)
{j--;}//從右向左找第一個小於x的數
if(i<j)
{s[i++]=s[j];}
while(i<j&&s[i]<=x)
{i++;}//從左到右找第一個大於等於x的數
if(i<j)
{s[j--]=s[i];}
}
s[i]=x;
Quick_sort(s,l,i-1);//遞歸
Quick_sort(s,i+1,r);
}
}
int main()
{
int arr[7] = { 1,9,7,6,5,35,15 };
int i;
printf("之前的數組:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
Quick_sort(arr, 0, 6);
printf("排序之後的數組:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
return 0;
}
❹ 快速排序。c語言
#include<stdio.h>
#include<malloc.h>
voidchange(int*a,int*b)
{
intt=*a;
*a=*b;
*b=t;
}
voidqsort(int*a,intn)
{
if(n>1){
inti=0,j=n-1,t=0;
for(;i<j;)
{
while(a[t]<=a[j])j--;
if(j<0)break;
change(a+t,a+j);
t=j;
while(a[t]>=a[i])i++;
if(i>=n)break;
change(a+t,a+i);
t=i;
}
qsort(a,i-1);
qsort(a+i+1,n-i-1);
}
}
intmain(void)
{
int*a;
intt,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",a+i);
qsort(a,n);
for(i=0;i<n;i++)
printf("%d",a[i]);
free(a);
}
return0;
}
❺ C語言快速排序
你寫錯一個字元
while(j>i&&R[i].key>tmp.key)
j--;
R[i]應該是R[j],比較R[j]的值,下面是正確的,
while(j>i&&R[j].key>tmp.key)
j--;
❻ C語言 快速排序
這個程序很糟糕,void qsort(long,long); 不知道是聲明還是調用,聲明就應該寫再main前面(void qsort(long s1,long s2); ),調用就應該寫成調用的形式(qsort(s1,s2); )而且你的調用沒有傳值過去,
還有a[i]中i不可能是long型,
if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
其實就是排第一遍之後再進行第二遍排序,直到排序完成。
❼ 快速排序 C語言
題目好像沒要求遞歸演算法,是不是可以不用遞歸。新手用遞歸容易攪糊塗。
❽ 快速排序 c語言
你的split函數應該錯了,你改成別的就能正常
❾ C語言,快速排序
確實是low++,先是從後向前找小的,再從前往後找大的,所以是high--和low++搭配。
❿ C語言的快速排序的演算法是什麼啊
快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。 演算法過程設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用第一個數據)作為關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。 一趟快速排序的演算法是: 1)設置兩個變數I、J,排序開始的時候:I=0,J=N-1; 2)以第一個數組元素作為關鍵數據,賦值給key,即 key=A[0]; 3)從J開始向前搜索,即由後開始向前搜索(J=J-1),找到第一個小於key的值A[J],並與key交換; 4)從I開始向後搜索,即由前開始向後搜索(I=I+1),找到第一個大於key的A[I],與key交換; 5)重復第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另循環結束。) 例如:待排序的數組A的值分別是:(初始關鍵數據:X=49) 注意關鍵X永遠不變,永遠是和X進行比較,無論在什麼位子,最後的目的就是把X放在中間,小的放前面大的放後面。 A[0] A[1] A[2] A[3] A[4] A[5] A[6]: 49 38 65 97 76 13 27 進行第一次交換後:27 38 65 97 76 13 49 ( 按照演算法的第三步從後面開始找) 進行第二次交換後:27 38 49 97 76 13 65 ( 按照演算法的第四步從前面開始找>X的值,65>49,兩者交換,此時:I=3 ) 進行第三次交換後:27 38 13 97 76 49 65 ( 按照演算法的第五步將又一次執行演算法的第三步從後開始找 進行第四次交換後:27 38 13 49 76 97 65 ( 按照演算法的第四步從前面開始找大於X的值,97>49,兩者交換,此時:I=4,J=6 ) 此時再執行第三步的時候就發現I=J,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所有大於49的數全部在49的後面,所有小於49的數全部在49的前面。 快速排序就是遞歸調用此過程——在以49為中點分割這個數據序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部數據序列的快速排序,最後把此數據序列變成一個有序的序列,根據這種思想對於上述數組A的快速排序的全過程如圖6所示: 初始狀態 {49 38 65 97 76 13 27} 進行一次快速排序之後劃分為 {27 38 13} 49 {76 97 65} 分別對前後兩部分進行快速排序 {27 38 13} 經第三步和第四步交換後變成 {13 27 38} 完成排序。 {76 97 65} 經第三步和第四步交換後變成 {65 76 97} 完成排序。