這幾天研究了一下排序算法,我發現網上很多代碼給定的都是僞代碼,或是裏面表達的內容不清楚,不方便初學者學習與分析,然後我根據自己的經驗把源代碼寫下來,僅供大家參考:
/***********************************************
* 作者 :skywalker_prime
* 聯繫方式 :[email protected]
* 最後修改時間 :2015-08-02 14:08
* 文件名稱 :sorting.c
* 程序描述 :
* csdnd地址 :blog.csdn.net/skywalker_prime
***********************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 6
void bubble(int a[],int n);
void choose(int a[],int n);
void insert(int a[],int n);
void quick(int a[],int low,int high);
int main()
{
int i=0;
int a[6]={3,5,11,1,6,7};
// bubble(a,N);
//choose(a,N);
//insert(a,N);
quick(a,0,N-1);
for(i=0;i<N;i++)// 打印排序後的序列
printf("%d ",a[i]);
printf("\n");
return 0;
}
#if 0
void bubble(int a[],int n)//冒泡排序法
{
int temp=0;
int i=0,j=0;
for(i=1;i<N;i++)
{
for(j=N-1;j>=i;j--)
{
if(a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
#endif
#if 0
void choose(int a[],int n)//選擇法
{
int i=0,j=0,k=0,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(a[k]>a[j])
{
k=j;
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
}
#endif
#if 0
void insert(int a[],int n)// 插入法
{
int i,j,key;
for(i=1;i<n;i++)
{
j=i;
key=a[i];
while(j>0&&key<a[j-1])
{
a[j]=a[j-1];
j--;
}
a[j]=key;
}
}
#endif
void quick(int a[],int low,int high)//快速排序
{
int temp,i,j;
if(low<high)
{
int key=a[low];
i=low,j=high;
while(1)
{
while(i<j&&a[i]<key)
i++;
while(j>i&&a[j]>key)
j--;
if(i>=j)
{
break;
}
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
temp=a[j];
a[j]=key;
key=temp;
quick( a, low, (j-1));
quick( a, i+1, high);
return ;
}
}