c語言排序之冒泡排序,選擇排序,插入排序,快速排序總結

這幾天研究了一下排序算法,我發現網上很多代碼給定的都是僞代碼,或是裏面表達的內容不清楚,不方便初學者學習與分析,然後我根據自己的經驗把源代碼寫下來,僅供大家參考:

/***********************************************
 * 作者			: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 ;

	}

}


發佈了22 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章