C语言快速排序代码

作者&投稿:封国 (若有异议请与网页底部的电邮联系)
C语言快速排序的代码~

首先我赞成你直接要代码的这种方法。
从你这个提问可以看出你对常用的排序算法都接触过,并且都没搞懂到底是怎么回事。
现在的电子平台资源都很丰富了,硬件平台的运行速度可以做到很高了,在大多数的情况下可以考虑用空间换时间的方法,也就是说你应该先搞懂算法的本质,然后再自己去实现它,开始的时候可以不考虑时间上的损耗。
排序的本质就是两个数比较大小,并根据其大小将其放到相应的位置。
记住其本质是什么,你自己绝对可以使用相应的语言实现它。

1、“快速排序法”使用的是递归原理,下面一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是速度太慢。2、快速排序代码:
#includevoid quicksort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right) return; while(i!=j) { while(a[j]>=temp&&j>i) j--; if(j>i) a[i++]=a[j]; while(a[i]i) i++; if(j>i) a[j--]=a[i]; } a[i]=temp; quicksort(a,left,i-1); quicksort(a,i+1,right);}void main(){ int a[]={53,12,98,63,18,72,80,46,32,21}; int i; quicksort(a,0,9); /*排好序的结果*/ for(i=0;i<10;i++) printf("%4d
",a[i]);}

采用快速排序,用递归实现
#include <stdio.h>
#define N 10 //定义排序数组元素个数
int Qsort(int start,int length,int a[])//start排序的起始,length是要排序序列长度
{
int x = a[start];
int i,j;
i = start;
j = length -1;
while(i < j)
{
if(x < a[j])
j--;
else if(x > a[j])
{
a[i] = a[j];
a[j] = x;
i++;
}
else if(x < a[i])
{
a[j] = a[i];
a[i] = x;
j--;
}
else
i++;
}
if(start < length-1)
{
Qsort(start,i,a);
Qsort(i+1,length,a);
}
}

void main()
{
int a[N] = {0};
int i;
for(i = 0;i < N;i++)
scanf("%d",&a[i]);
Qsort(0,N,a);
for(i = 0;i < N;i++)
printf("%d ",a[i]);
}
程序执行时输入N个数,对这N个数进行排序,可以预设N的长度

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

}

推荐回答中的程序有些不妥,改后的程序为
#include <stdio.h>
int partions(int l[],int low,int high)
{
int prvotkey=l[low];
while (low<high)
{
while (low<high&&l[high]>=prvotkey)
--high;
if (low<high)
l[low++]=l[high];
while (low<high&&l[low]<=prvotkey)
++low;
if (low<high)
l[high--]=l[low];
}
l[low]=prvotkey;
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
}
return;
}
void quicksort(int l[],int n)
{
qsort(l,0,n-1); //第一个作为枢轴 ,从第一个排到第n个
return;
}
void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39};
for (int b=0;b<11;b++)
printf("%3d",a[b]);
printf("\n");
quicksort(a,11);
for(int c=0;c<11;c++)
printf("%3d",a[c]);
}
这个程序是可用的,大家可以试试

快速排序,递归实现,短小精干版:
#include<stdio.h>
#include<stdlib.h>
void quickSort(int* arr,int startPos, int endPos)
{
int i,j;
int key;
key=arr[startPos];
i=startPos;
j=endPos;
while(i<j)
{
while(arr[j]>=key && i<j)--j;
arr[i]=arr[j];
while(arr[i]<=key && i<j)++i;
arr[j]=arr[i];
}
arr[i]=key;
if(i-1>startPos) quickSort(arr,startPos,i-1);
if(endPos>i+1) quickSort(arr,i+1,endPos);
}

int main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
quickSort(a,0,9);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
system("pause");
return 0;
}

#include <stdio.h>
#define N 10
main()
{
int i, j, temp;
int a[N];
printf("please input %d numbers:\n",N);
for(i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}

for (i = 0; i < N-1; i++) //表示要比较N-1趟
{
for (j =0; j < N-i-1; j++) //表示每趟比较的次数
{
if (a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i = 0; i < N; i++)
{
printf("%-5d",a[i]);
}
printf("\n");

}


如何将c语言实现按从小到大的顺序输出?
以快速排序为例的排序代码:void quickSort(int a[],int l,int r) { if(l>=r)return;int i = l;int j = r;int key = a[l];\/\/选择第一个数为key while(i<j) { while(i<j && a[j]>=key)\/\/从右向左找第一个小于key的值 j--;if(i<j) { a[i] = a[j];i++;} ...

菜鸟提问 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...

C语言快速排序
\/快速排序算法\/ int Partition(int D[], int l, int r){ D[0]=D[l];while (l<r) { while (l<r && D[0]<D[r]) r--;D[l]=D[r];while (l<r && D[0]>=D[l]) l++;D[r]=D[l]; } D[r]=D[0];return r;} void Qsort(int D[], int l, int r){ int p...

c语言怎样实现快速排序
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);\/\/输出排序后的结果...

c语言函数快速排序问题
int main(int argc, char *argv[]) { int list[]={98,34,56,27,78,73,70,90,28,84,45,85,12,18,54,34,29};int i;qksort(list,0,16);for(i=0;i<17;i++){ printf("%d ",list[i]);} printf("\\n");return 0;} int qksort(int a[],int leftposition,int right...

C语言快速排序代码
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,...

用C语言写个完整程序,包括希尔排序和快速排序
\/*code by jgao,递归快速排序算法,输入为字符数组*\/#include<stdio.h>void main(){ int quickSort(char vert[], int n, int begin, int end); char vert[] = "qwertyuiopasdfghjklzxcvbnm"; int n = 26; quickSort(vert, n, 0, n-1);}int quickSort(char vert[], int n, int begin, int ...

C语言中快速排序法的原理及应用
一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢。附上快速排序代码:include<stdio.h>void quicksort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right...

快速排序统计比较次数和记录移动次数,用c语言实现,数据自己输入。_百 ...
int key;intother_data;}RecordType;typedef struct{ RecordType r[LIST_SIZE+1];int length;}RecordList;int compare_number=0,move_number=0;int QKPass_one(RecordType r[], int low, int high)\/\/低到高 单排 { int x=r[low].key;move_number++;while(low<high){ while(low<high&&r...

快速排序算法c语言
关于时间复杂度 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。关于稳定性 稳定的排序算...

陆丰市18730873635: C语言快速排序代码
尹爬丹栀: #include &lt;stdio.h&gt; int partions(int l[],int low,int high) { int prvotkey=l[low]; l[0]=l[low]; while (low&lt;high) { while (low&lt;high&amp;&amp;l[high]&gt;=prvotkey) --high; l[low]=l[high]; while (low&lt;high&amp;&amp;l[low]&lt;=prvotkey) ++low; l[high]=l[low]; }...

陆丰市18730873635: 用C语言写一个快速排序法,不要用库函数 -
尹爬丹栀: include<stdio.h> void main() {int a[]={8,4,24,1,54,87,113,39};//这里的元素可以手动输入,用for循环输入,先给定数组长度N //再一次输入数组元素 /* int n; scanf("&%d",n); for(int =0;i<n;i++)scanf("&%d",&a[i]); */ for(int i=0;i<8;i++){for(int j...

陆丰市18730873635: 急需一个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...

陆丰市18730873635: 用C语言编快速排序
尹爬丹栀: #include<stdio.h> #include<stdlib.h> long a[10000000]; long i,j,k,n; void ks(int i, int j) { int t,l=i,h=j,m;m=a[(i+j)/2];while (i<=j){while (a[i]<m) i=i+1;while (a[j]>m) j=j-1;if (i<=j){ t=a[i]; a[i]=a[j]; a[j]=t; i=i+1; j=j-1;}}if(i<h) ks(i,h);if(l<j) ks(l,j); }main() ...

陆丰市18730873635: 用C语言编写一个快速排序算法 输入10个数 -
尹爬丹栀: 代码如下: #include <stdio.h> #define N 10 void quickSort(int *arr,int l,int r) {//此处编写代码实现快速排序 int i,j,x,temp; if(l<r) { i=l; j=r; x=arr[(l+r)/2]; //以中间元素为轴 while(1) { while(i<=r&&arr[i]<x)i++; while(j>=0&&arr[j]>x)j--; if(i>=j) //相遇则跳出 ...

陆丰市18730873635: C语言快速排序 -
尹爬丹栀: #includevoid quickSort(int *p,int head,int tail) { int low=head,high=tail; int s=p[head]; if(head>=tail)return; while(low while(lows)high--; if(low while(low<=s)low++; if(low }p[low]=s; quickSort(p,head,low-1);quickSort(p,low+1,tail); }void main() { int i=0; int ...

陆丰市18730873635: 采用C语言编一个快速排序的程序
尹爬丹栀: 第一个输入是数据总数 下面是每个数据分别输入 #include <stdio.h> #include <stdlib.h> #define MAX 50000 int AA[MAX],n; void getdata(){ int i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&AA[i]); } void putdata(){ int i; for(i=0;i<n;i++) printf("...

陆丰市18730873635: 用C语言编程实现快速排序算法 -
尹爬丹栀: 给个快速排序你参考参考 /********************** 快速排序 **************************** 基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当前的无序区划分为左右两个较小的无 序子区,使左边的记录均小于基...

陆丰市18730873635: 快速排序算法 -
尹爬丹栀: C语言程序: /* 快 速 排 序 */ #include "stdio.h" void QuickSort(int e[], int first, int end) { int i=first,j=end,temp=e[first];,xgXBjE

陆丰市18730873635: c语言编写快速排序 -
尹爬丹栀: int partition(int n[],int left,int right) //int类型的方法,传入参数(int类型的 数组n,int类型的参数left和right) { int lo,hi,pivot,t;//定义int类型的变量pivot=n[left];//给变量pivot赋值,值为数组n中第left个数字 lo=left-1;//给lo赋值,这是n[left]前一位数字 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网