范文无忧网范文学习范文大全

C语言快速排序代码

09月15日 编辑 fanwen51.com

[c语言中的数组排序]#include #include int numSort(int *a,int count_num) { int i,j,min=-1,temp; for(j=count_num-1;j>0;j--) for(i=j-1;i>=0;i--) if(a[j] > a[i]) { temp=a[i]; a[i]=a[j]...+阅读

C语言快速排序代码

#include int partions(int l[],int low,int high) { int prvotkey=l[low]; l[0]=l[low]; while (low=prvotkey) --high; l[low]=l[high]; while (low

C语言实现七种排序算法的

(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码: void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ { int i,j,temp; for(i=0;ia[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } 冒泡法原理简单,但其缺点是交换次数多,效率低。

下面说明一种源自冒泡法但更有效率的方法“选择法”。 (2)“选择法” 选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率。 void choise(int *a,int n) { int i,j,k,temp; for(i=0;ia[j]) k=j; /*是k总是指向最小元素*/ if(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/ temp=a[i]; a[i]=a[k]; a[k]=temp; } } } 选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。

(3)“快速法” 快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素

(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码: void quick(int *a,int i,int j) { int m,n,temp; int k; m=i; n=j; k=a[(i+j)/2]; /*选取的参照*/ do { while(a[m]k&&n>i) n--; /* 从右到左找比k小的元素*/ if(m<=n) { /*若找到且满足条件,则交换*/ temp=a[m]; a[m]=a[n]; a[n]=temp; m++; n--; } }while(m<=n); if(mi) quick(a,i,n); }

(4)“插入法” 插入法是一种比较直观的排序方法。

它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。 void insert(int *a,int n) { int i,j,temp; for(i=1;i=0&&temp

它首先把相距k(k>=1)的那几个元素排好序,再缩小k值

(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码: void shell(int *a,int n) { int i,j,k,x; k=n/2; /*间距值*/ while(k>=1) { for(i=k;i=0&&x

#include /*别偷懒,下面的"..."代表函数体,自己加上去哦!*/ void bubble(int *a,int n) { ... } void choise(int *a,int n) { ... } void quick(int *a,int i,int j) { ... } void insert(int *a,int n) { ... } void shell(int *a,int n) { ... } /*为了打印方便,我们写一个print吧。*/[code] void print(int *a,int n) { int i; for(i=0;i

用C语言编程实现快速排序算法

给个快速排序你参考参考 /********************** 快速排序 **************************** 基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当前的无序区划分为左右两个较小的无 序子区,使左边的记录均小于基准值,右边的记录均大于或 等于基准值,基准值位于两个无序区的中间位置(即该记录 最终的排序位置)。之后,分别对两个无序区进行上述的划 分过程,直到无序区所有记录都排序完毕。*************************************************************//************************************************************* 函数名称:static void swap(int *a, int *b) 参 数:int *a---整型指针 int *b---整型指针 功 能:交换两个整数的位置 返 回 值:无 说 明:static关键字指明了该函数只能在本文件中使用**************************************************************/ static void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int quickSortNum = 0; // 快速排序算法所需的趟数/************************************************************* 函数名称:static int partition(int a[], int low, int high) 参 数:int a[]---待排序的数据 int low---无序区的下限值 int high---无序区的上限值 功 能:完成一趟快速排序 返 回 值:基准值的最终排序位置 说 明:static关键字指明了该函数只能在本文件中使用**************************************************************/ static int partition(int a[], int low, int high) { int privotKey = a[low]; //基准元素 while(low= privotKey) // 找到第一个小于privotKey的值 high--; //从high所指位置向前搜索,至多到low+1位置 swap(&a[low], &a[high]); // 将比基准元素小的交换到低端 while(low

C语言程序快速排序

首先 你在e68a84e8a2ade79fa5e9819331333332643937if(i

{r[j]=r[i];j--;}}这里多了一个}符号

第二

while(ii&r[j]>=r[0])

if(ii&r[i]<=r[0])

这两个语句出现了ii 应该是i

其他的我还在帮你看

好吧,上面两个语句还有两个问题,应该把i换成j,否则一开始就判断为假

我完全看不懂你混乱的思维,直接给你贴一个快排的代码

void quiksort(int a[],int low,int high){

int i = low;

int j = high; int temp = a[i]; if( low < high) { while(i < j) { while((a[j] >= temp) & (i < j)) { j--; } a[i] = a[j]; while((a[i] <= temp) & (i < j)) { i++; } a[j]= a[i]; } a[i] = temp; quiksort(a,low,i-1); quiksort(a,j+1,high); } else { return; }}

void main()

{

int arry[5] = {23,1,21,4,19};

quiksort(arry,0,4);

for(i=0;i<5;i++)

{

printf("%d ",arr[i]);

}

printf("\n");

}

延伸阅读:

C语言数组排序#include<stdio.h> void main() { int a[10] = { 10,2,3,4,5,6,9,8,7,1 }; int i,j,t; for(j=0;j<10;j++) for(i=0;i<10-1-j;i++) if(a[i]>a[i+1]) /* 由小到大,由大到小时改...

C语言数组排序高手快来#include "stdio.h" #define N 4 void main() { long num[N]; float score[N],sum=0,average; int a,b,i,j; printf("please input student number:\n"); for(i=0;i scanf("%ld",&...

数组排序C语言#include <stdio.h> #include <iostream.h> #include <stdlib.h> #include<time.h> void main() { int a[100],i,c,b,d,e,n; cin>>n; srand((unsigned)time(NULL)); for(i=0...

C语言中数组的排序方法中选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。 例如: 4 1 5 2 3 找到最小...

C语言数组排序方法像是选择法排序,但不太简练! 正确的选择法为: #include <stdio.h> void main(void) { int a[9]={3,42,55,546,43,323,54,121,32},i,j,l,temp; for(i=0;i<9;i++) for(j=i+1;j<8;...

c语言整数数组排序#include"stdio.h" #define N 10 void sort(int a[],int method) { int i,k,t,j; switch(method) { case 1: for(i=0;i<N;i++) { for(j=0;j<N;j++) { if(a[j]>a[i]) { t=a[i];...

C语言计算工资的代码你为什么要用;if(y<5,t<=40),建议你看看逗号运算符的用法,、 int main() { int y,t; double m; scanf("%d %d",&y,&t); if(y<5 & t<=40) //且的关系 printf("%.2f",m=t*30); else i...

c语言告白代码带音乐用C语言播放音乐,一般需要额外的库或者调用系统的API函数。 以Windows为例,可以通过PlaySound函数播放wav格式的音乐。示例如下: #include<stdio.h> #include<windows.h> #incl...

vb快速排序之二分法代码vb快速排序之二分法代码,c对9 1 8 2 7 3 6 4 5用二分法排序成升序!求写法!求高人指教!Public Function BinSearch(ByRef strElement() As String, ByVal strKey As String) As L...

推荐阅读
图文推荐
栏目列表