常用的四种排序算法

#include <stdio.h>

void BubbleSort(int a[], int size, int order);
void SelectSort(int a[], int size, int order);
void InsertSort(int a[], int size, int order);
void QuickSort(int a[], int size, int order);

int main()
{
	int a[5]={5,3,4,2,1};
	int i;

	//BubbleSort(a,5,1);
	//SelectSort(a,5,1);
	//InsertSort(a,5,1);
	QuickSort(a,5,1);

	for(i=0;i<5;i++)
		printf("%d ",a[i]);

	printf("\n");

	return 0;
}

void BubbleSort(int a[], int size, int order) //order为1代表升序,冒泡排序算法
{
	int i, j;
	for(i=0;i<size-1;i++)
	{
		for(j=0;j<size-i-1;j++)
		{
			if((order)?(a[j]>a[j+1]):(a[j]<a[j+1]))
			{
				a[j]=a[j]^a[j+1];
				a[j+1]=a[j]^a[j+1];
				a[j]=a[j]^a[j+1];
			}
		}
	}
}

void SelectSort(int a[], int size, int order) //order为1代表升序,选择排序算法
{
	int i, j, k;
	for(i=0;i<size-1;i++)
	{
		k=i;
		for(j=i+1;j<size;j++)
		{
			if((order)?(a[k]>a[j]):(a[k]<a[j])) k=j;
		}

		if(k!=i)
		{
			a[k]=a[k]^a[i];
			a[i]=a[k]^a[i];
			a[k]=a[k]^a[i];
		}
	}
}

void InsertSort(int a[], int size, int order) //order为1代表升序,插入排序算法
{
	int i, j, k;
	for(i=1;i<size;i++)
	{
		k=a[i];
		j=i-1;
		while(((order)?(a[j]>k):(a[j]<k)) && j>=0)
		{
			a[j+1]=a[j];
			j--;
		}
		a[j+1]=k;
	}
}

void QuickSort(int a[], int size, int order) //order为1代表升序,快速排序算法
{
	int i,j,k;
	if(size<=1) return;

	i=0;
	j=size-1;
	k=a[i];

	while(i!=j)
	{
		while(i!=j && ((order)?(a[j]>=k):(a[j]<=k)))
			j--;
			a[i]=a[j];
		while(i!=j && ((order)?(a[i]<=k):(a[i]>=k)))
			i++;
			a[j]=a[i];
	}

		a[i]=k;
		QuickSort(a,i,1);
		QuickSort(a+i+1,size-i-1,1);

}

  编译环境VC6.0,测试OK。

时间: 2024-12-11 14:36:00

常用的四种排序算法的相关文章

四种排序算法PHP实现类

四种排序算法的PHP实现:1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 2) 选择排序(Selection Sort)的基本思想是: 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕. 3) 冒泡排序的基本思想是: 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止. 4) 快速排序实质上和

学习Java绝对要懂的,Java编程中最常用的几种排序算法!

今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!     ,群里有免费的学习视频和项目给大家练手.大神有空时也会带带大家的,学Java的过程中一定要多问多记,不要怕问题,要去主动的解决问题. 冒泡排序 选择排序 插入排序 归并排序 例如:降序排{10,5,9,6}分为{10,5},{9,6}然后{5,10},{6,9}然后完成 快速排序 就最后一个快速排序可能大家看不太懂,我就举个例子吧 开始输入以下数组

JavaScript中常用的4种排序算法

冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍:比较相邻的两个元素,如果前一个比后一个大,则交换位置.第一轮把最大的元素放到了最后面.由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比较. 冒泡算法改进:设置一个标志,如果这一趟发生了交换,则为true.否则为false.如果这一趟没有发生交换,则说明排序已经完成.代码如下: 假如数组长度是20,如果只有前十位是无序排列的,后十位是

四种排序算法实现

目录 冒泡排序 冒泡算法 源代码(冒泡排序) 选择排序 选择算法 源代码(选择排序) 插入排序 插入算法 源代码(插入排序) 快速排序 快速排序算法 源代码(快速排序) 总结 References 冒泡排序 冒泡算法 比较相邻的元素.如果左边比右边大,就互换位置 对每一对相邻元素作同样的工作,从第一对到最后一对,完成后,最后元素为最大值 源代码(冒泡排序) //冒泡排序 public static void bubbleSort(int[] slist) { //从头开始遍历 for(int i

一遍记住Java常用的八种排序算法与代码实现

1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直到最后一个数,重复第二步. 如何写写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好序列的最后一个数的位数.insertNum和j=i-1. 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动

Java常用的八种排序算法与代码实现

1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直到最后一个数,重复第二步. 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好序列的最

常用的三种排序算法

#快速排序 def QuickSort(arr,left,right): """ arr: the array needed to sort left: the start index right: the end index """ if(left>=right): return ; base = arr[left]; i = left; j = right; while(i<j and arr[j]>=base): j =

四种排序算法的时间比较

#include<iostream> #include<time.h> using namespace std; template<class T> inline void Swap(T& a, T& b); template<class T> void BubbleSort(T a[], int n); template<class T> void InsertionSort(T a[], int n); template<

php中的四种排序算法

1 1. 冒泡排序 2 3 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 4 5 代码实现: 6 7 8 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 9 function bubbleSort($arr) 10 { 11 $len=count($arr); 12 //该层循环控制 需要冒泡的轮数 13