请哥哥姐姐为我设计个简单的快速排序算法,C语言的,谢谢啦!
发布网友
发布时间:2022-04-29 20:37
我来回答
共4个回答
热心网友
时间:2022-05-22 02:50
void QuickSort(int *a,int left,int right)
{
if ( left < right )
{
int i = left;
int j = right + 1;//why add 1?
int pivot = a[left];//youbiao
do
{
do
{
i++;//the second
} while ( a[i] < pivot );
do
{
j--;
} while ( a[j] > pivot );
if ( i < j )
{
swap(a[i],a[j]);
}
} while ( i < j );
if (left != j)
{
swap(a[left],a[j]);
}
//digui
QuickSort(a,left,j-1);
QuickSort(a,j+1,right);
}
}
//测试排序代码
void print(int *a,int n)
{
int i;
for ( i = 0 ; i < n ; i++ )
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int a[20];
myrand(a,20);
QuickSort(a,0,19);
print(a,20);
return 0 ;
}
呵呵 有问题再联系。。。。
热心网友
时间:2022-05-22 04:08
//其实C++里有自带的算法库的,里面有快排算法
//下面这个是我自己写的
#include "stdio.h"
#include "conio.h"
#define max 100
void swap(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
int split(int a[],int low,int high)
{
int k,i=low;
int x=a[low];
for(k=low+1;k<=high;k++)
if(a[k]<=x){
i+=1;
if(i!=k)
swap(&a[i],&a[k]);
}
swap(&a[low],&a[i]);
return i;
}
void quick_sort(int a[],int low,int high)
{
int k;
if(low<high)
{
k=split(a,low,high);
quick_sort(a,low,k-1);
quick_sort(a,k+1,high);
}
}
main()
{
FILE *in,*out;
int a[max],n,i;
in=fopen("infile","r");
out=fopen("outfile","w");
while(!feof(in))
{
fscanf(in,"%d",&n);
for(i=0;i<n;i++)
fscanf(in,"%d",&a[i]);
quick_sort(a,0,n-1);
for(i=0;i<n;i++)
fprintf(out,"%3d",a[i]);
fprintf(out,"\n");
}
fclose(in);
fclose(out);
}
热心网友
时间:2022-05-22 05:43
int partitions(int a[],int low,int high) { int pivotkey=a[low]; //a[0]=a[low]; while(low<high) { while(low<high && a[high]>=pivotkey) --high; a[low]=a[high]; while(low<high && a[low]<=pivotkey) ++low; a[high]=a[low]; } //a[low]=a[0]; a[low]=pivotkey; return low; } void qsort(int a[],int low,int high) { int pivottag; if(low<high) { //递归调用 pivottag=partitions(a,low,high); qsort(a,low,pivottag-1); qsort(a,pivottag+1,high); } } void quicksort(int a[],int n) { qsort(a,0,n); }
热心网友
时间:2022-05-22 07:34
冒泡、沉底法行不
请哥哥姐姐为我设计个简单的快速排序算法,C语言的,谢谢啦!
void QuickSort(int *a,int left,int right){ if ( left < right ){ int i = left;int j = right + 1;//why add 1?int pivot = a[left];//youbiao do { do { i++;//the second } while ( a[i] < pivot );do { j--;} while ( a[j] > pivot );if ( i < j ...
C语言快速排序算法问题
快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,8...
用C语言写个完整程序,包括希尔排序和快速排序
(c): a b c d e f g h i k l j m p o n q s u z x y v t r w(i): a b c d e f g h i k l j m p o n q s u z x y v t r w(k): a b c d e f g h i j k l m p o n q s u z x y v t r w(p): a b c d e f g h i j k l m...
C语言的快速排序的算法是什么啊?
一趟快速排序的算法是: 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...
快速排序算法c语言
O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。关于稳定性 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。名词解释:n:数据规模 k:"桶"的个数 ...
快速排序算法(C语言或者PYTHON) 请教一下,已经有while(i<j)的前提...
while(i<j){ while((a[j]>=temp)&&(i<j)){ j--;} ……} 这样写应该就明白了吧,while是循环语句。
快速排序,看了解释还是不会,求通俗点的
下面排序C语言的排序快速代码,参考一下 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) ...
C语言十大经典排序算法(动态演示+代码,值得收藏)
1. 冒泡排序这一经典算法以交换相邻元素的方式,逐个比较并调整,就像泡泡在水面上浮起。平均/最差时间复杂度为O(n^2),空间复杂度为O(1),但稳定性使其在某些场景下依然有其优势。2. 选择排序选择排序犹如寻宝游戏,它在未排序部分中挑选出最小(或最大)的元素,将其放置在已排序序列的末尾。
C语言一个快速排序的问题 我应该是传参的问题 但我不知道该如何改 请大...
下面是《算法导论》里快速排序的实现,希望对你有用:include<stdio.h>void swap(int *a,int *b){ int t =*a; *a = *b; *b = t; return;}int partition(int a[],int start,int end){ int x = a[end]; int i = start -1; int j; for(j= start...
快速排序算法在平均情况下的时间复杂度为 求详解
时间复杂度为O(nlogn) n为元素个数 1. 快速排序的三个步骤:1.1. 找到序列中用于划分序列的元素 1.2. 用元素划分序列 1.3. 对划分后的两个序列重复1,2两个步骤指导序列无法再划分 所以对于n个元素其排序时间为 T(n) = 2*T(n/2) + n (表示将长度为n的序列划分为两个子序列,每个子...