温故知新,基础复习(快速排序及优化)

温故知新,基础复习(快速排序及优化)

使用了三值取中和插排优化


#include<stdio.h>

#define InsertSortNumber 10

void InsertSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex)
{
	printf("low=%d,high=%d\n",LowIndex,HighIndex);
	for (unsigned int i = LowIndex + 1; i <= HighIndex; ++i)
	{
		int TempValue = Arra[i];
		unsigned int j = i;
		for (; j > LowIndex && TempValue<Arra[j-1]; --j)
		{
			Arra[j]=Arra[j-1];
		}
		printf("j=%d,i=%d\n",j,i);
		if(j!=i) {
			Arra[j]=TempValue;
		}
	}
}

int GetPivotByMedianOfThree(int Arra[],unsigned int LowIndex,unsigned int HighIndex)
{
	int MedianIndex = LowIndex +(HighIndex - LowIndex)/2;

	if (Arra[MedianIndex]<Arra[LowIndex])
	{
		int TempValue = Arra[LowIndex];
		Arra[LowIndex]=Arra[MedianIndex];
		Arra[MedianIndex]=TempValue;
	}

	if (Arra[MedianIndex]<Arra[HighIndex])
	{
		return Arra[MedianIndex];
	}
	else if (Arra[HighIndex]>Arra[LowIndex])
	{
		return Arra[HighIndex];
	}

	return Arra[LowIndex];
}

unsigned int Partition(int Arra[],unsigned int LowIndex,unsigned int HighIndex,int PivotValue)
{
	while(1){
		while(Arra[LowIndex]<PivotValue) {
			LowIndex++;
		}
		while(Arra[HighIndex]>PivotValue) {
			HighIndex--;
		}

		if (LowIndex>HighIndex)
		{
			return LowIndex;
		}

		int TempValue = Arra[LowIndex];
		Arra[LowIndex]=Arra[HighIndex];
		Arra[HighIndex]=TempValue;
		LowIndex++;
		HighIndex--;
	}
}

void QuickSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex)
{
	if ((HighIndex+1) - LowIndex > InsertSortNumber)
	{
		int PivotValue = GetPivotByMedianOfThree(Arra,LowIndex,HighIndex);
		unsigned int MedianCutIndex = Partition(Arra,LowIndex,HighIndex,PivotValue);
		printf("PivotValue=%d,MedianCutIndex=%d\n",PivotValue,MedianCutIndex);
		QuickSort(Arra,LowIndex,MedianCutIndex-1);
		QuickSort(Arra,MedianCutIndex,HighIndex);
	}
	else {
		InsertSort(Arra,LowIndex,HighIndex);
	}
}

int main()
{
	int Arra[] = {1,2,3,50,-5,-7,20,-3,-5,10,13,8,6,4,2,0,-2,-4,-6,-8,18};
    //int Arra[] = {1,2,3,50,-5,-7,20,-3,10,8};
    //int Arra[] = {3,4,6,8,5,1};
	QuickSort(Arra,0,sizeof(Arra)/sizeof(Arra[0])-1);
	//InsertSort(Arra,0,sizeof(Arra)/sizeof(Arra[0])-1);
	printf("%d",Arra[0] );
	for (unsigned int i = 1; i < sizeof(Arra)/sizeof(Arra[0]); ++i)
	{
		printf(",%d",Arra[i] );
	}
}

待完善聚集重复元素的优化

时间: 2024-09-20 08:44:13

温故知新,基础复习(快速排序及优化)的相关文章

温故知新,基础复习(二叉堆排序)

温故知新,基础复习(二叉堆排序) 最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序) 下例是最小堆 #include <stdio.h> #include <stdlib.h> void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex) { int TeampValue = Arra[LeftIndex]; Arra[LeftIndex]=Arra[RightIndex]; Arra[Righ

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对) #include<stdio.h> #include<stdlib.h> void PrintSumNumbers(int Arra[],int ASize,int Sum) { //O(1) if (ASize<2) { printf("The size of the Arra is invalid.\n"); return; } if(Sum&

mybatis学习笔记之基础复习(3)

mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输入参数映射.输出结果映射) mybatis入门门槛不高,学习成本低,让程序员把精力放在sql语句上,对sql语句优化非常方便, 适用于需求变化较多项目,比如互联网项目. mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,

使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化

1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了操作的基本套件(正常或通过sudo)和上传/下载文件,如提示用户输入运行辅助功能,或中止执行. 用Python3开发的部署工具叫fabric3:fabric3,和fabric一样最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署. 典型用途包括创建一个包含一个或多个

MaxCompute基础与MaxCompute SQL优化

总论: 大数据计算服务 ( MaxCompute,原名 ODPS )是一种快速.完全托管的 TB/PB 级数据仓库解决方案 .MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全 .同时,大数据开发套件和 MaxCompute关系紧密,大数据开发套件为 MaxCompute 提供了一站式的数据同步,任务开发,数据工作流开发,数据管理和数据运维等功能,您可以参见 大数据开发套件简介 来对其进行深入了

快速排序及优化

   update:更正选择中数的描述,在7到39之间的数组大小选择median-of-three来选择pivot,大小等于7的数组则直接使用中数作为pivot.     quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pivot放在左边,将大于pivot放在右边,针对左右两个子序列重复此过程,直到序列为空或者只有一个元素.这篇blog主要目的是关注quicksort可能的改进方法,并对这些改进方法做评测.其目的是为了理解Arrays

拒绝没有基础的网站seo优化

1. 看网站能否优化其实就是一个产品调研的问题,SEO的先天优势在于看过的网站大都不少,有大的,有小的:所以对于这样的网站能有多大的优化余地自己应该会明白.虽然你不能做更好的产品设计(一般都是小公司ceo 自己干的)你是否能拒绝这样的网站优化. 2.既然帮忙看了,你是否能和对方负责产品的人坦诚几见,告诉他们这样的网站其实没必要优化,还是为了优化去采集内容.进行群发?当然很多客户都说,我要,我要,看在钱的面子上,大多人都不会拒绝. 3.多谈关系,少谈技巧,再有技巧的SEO算法,也会被SE 轻松破解

备份恢复基础复习

1.数据库备份 数据库的备份分为一致性备份 和 非一致性备份....备份数据库也就是备份数据库的四个文件:数据文件.控制文件.参数文件.口令文件. 数据库的一致性备份:                 需要关闭数据库,所以也就是传说中的冷备份,基本步骤非常简单: 1)列出数据库内的所有数据文件和控制文件:通过查询v$controlfile和v$datafile中的name列即可. 2)关闭数据库SQL>shutdown immediate 3)利用操作系统命令拷贝所有的:数据文件,控制文件,参数

Python中的线性优化,第 2 部分 在云中构建一个可扩展的基础架构

简介 这个由三部分组成的系列文章的第 1 部分介绍了在 Python 中使用 Pyomo 库进行线性优化的 基础知识.现在我们将介绍如何扩展它.Python 缺乏真实的操作系统线程,该如何扩展它?本文将向您介绍 如何组合使用这些技术来创建一个实际的可扩展基础架构,该架构可用于构建一个 Pyomo Web 解决方案.我 们组合使用了一个单线程事件循环.一个 AMQP 服务器和工作线程流程来创建一个模式,利用该模式扩展一个 线性优化系统.该基础架构也适用于 Python 或 Ruby 中的许多通用计