StringList 自定义快速排序
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end; TMyRec = record
x: Integer;
y: Integer;
z: Integer;
end;
PMyRec = ^TMyRec; var
Form1: TForm1; implementation {$R *.dfm}
//function StringListCompareStrings(List: TStringList; Index1, Index2: Integer): Integer; function SortMethod(List: TStringList; Index1, Index2: Integer): Integer;
begin
if PMyRec(List.Objects[Index1])^.x > PMyRec(List.Objects[Index2])^.x then
Result := -
else
if PMyRec(List.Objects[Index1])^.x = PMyRec(List.Objects[Index2])^.x then
Result :=
else
Result := ;
end; procedure TForm1.Button1Click(Sender: TObject);
var
strList: TStringList;
mRec1, mRec2, mRec3: TMyRec;
pRec1, pRec2, pRec3: PMyRec;
begin
FillChar(mRec1, SizeOf(TMyRec), );
FillChar(mRec2, SizeOf(TMyRec), );
FillChar(mRec3, SizeOf(TMyRec), ); pRec1 := @mRec1;
pRec2 := @mRec2;
pRec3 := @mRec3; with mRec1 do
begin
x := ;
y := ;
z := ;
end; with mRec2 do
begin
x := ;
y := ;
z := ;
end; with mRec3 do
begin
x := ;
y := ;
z := ;
end; strList := TStringList.Create; strList.AddObject(IntToStr(pRec1^.x), TObject(pRec2));
strList.AddObject(IntToStr(pRec1^.x), TObject(pRec1));
strList.AddObject(IntToStr(pRec1^.x), TObject(pRec3)); ShowMessage( IntToStr( PMyRec(strList.Objects[])^.x ) //
+ IntToStr( PMyRec(strList.Objects[])^.x ) //
+ IntToStr( PMyRec(strList.Objects[])^.x ) //
); strList.CustomSort(SortMethod); ShowMessage( IntToStr( PMyRec(strList.Objects[])^.x ) //
+ IntToStr( PMyRec(strList.Objects[])^.x ) //
+ IntToStr( PMyRec(strList.Objects[])^.x ) //
); strList.Free; end; end.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;
TMyRec = record x: Integer; y: Integer; z: Integer; end; PMyRec = ^TMyRec;
var Form1: TForm1;
implementation
{$R *.dfm}//function StringListCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
function SortMethod(List: TStringList; Index1, Index2: Integer): Integer;begin if PMyRec(List.Objects[Index1])^.x > PMyRec(List.Objects[Index2])^.x then Result := -1 else if PMyRec(List.Objects[Index1])^.x = PMyRec(List.Objects[Index2])^.x then Result := 0 else Result := 1;end;
procedure TForm1.Button1Click(Sender: TObject);var strList: TStringList; mRec1, mRec2, mRec3: TMyRec; pRec1, pRec2, pRec3: PMyRec;begin FillChar(mRec1, SizeOf(TMyRec), 0); FillChar(mRec2, SizeOf(TMyRec), 0); FillChar(mRec3, SizeOf(TMyRec), 0);
pRec1 := @mRec1; pRec2 := @mRec2; pRec3 := @mRec3;
with mRec1 do begin x := 1; y := 2; z := 3; end;
with mRec2 do begin x := 3; y := 2; z := 3; end;
with mRec3 do begin x := 5; y := 2; z := 3; end;
strList := TStringList.Create;
strList.AddObject(IntToStr(pRec1^.x), TObject(pRec2)); strList.AddObject(IntToStr(pRec1^.x), TObject(pRec1)); strList.AddObject(IntToStr(pRec1^.x), TObject(pRec3));
ShowMessage( IntToStr( PMyRec(strList.Objects[0])^.x ) //3 + IntToStr( PMyRec(strList.Objects[1])^.x ) //1 + IntToStr( PMyRec(strList.Objects[2])^.x ) //5 );
strList.CustomSort(SortMethod);
ShowMessage( IntToStr( PMyRec(strList.Objects[0])^.x ) //5 + IntToStr( PMyRec(strList.Objects[1])^.x ) //3 + IntToStr( PMyRec(strList.Objects[2])^.x ) //1 );
strList.Free;
end;
end.
StringList 自定义快速排序的更多相关文章
- Swift学习笔记(5)--数组
数组的下标从0开始计数,相关方法属性涉及到下标时也从0开始计数 1.定义: //1.可变数组 var cityArray = ["Portland","San Franc ...
- Java8 新特性(一)- Lambda 表达式
2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ...
- Java集合框架实现自定义排序
Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...
- Effective Java 第三版—— 87. 考虑使用自定义序列化形式
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 快排 - 快速排序算法 (Chinar出品 简单易懂)
Quicksort 快排的简单讲解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Hadoop mapreduce自定义排序WritableComparable
本文发表于本人博客. 今天继续写练习题,上次对分区稍微理解了一下,那根据那个步骤分区.排序.分组.规约来的话,今天应该是要写个排序有关的例子了,那好现在就开始! 说到排序我们可以查看下hadoop源码 ...
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
- c# 自定义排序类(冒泡、选择、插入、希尔、快速、归并、堆排序等)
using System; using System.Text; namespace HuaTong.General.Utility { /// <summary> /// 自定义排序类 ...
随机推荐
- CSS3 基础知识
CSS3 基础知识1.边框 1.1 圆角 border-radius:5px 0 0 5px; 1.2 阴影 box-shadow:2px 3px 4px 5px rgba(0,0,0 ...
- Form 表单常用正则验证 (收藏)
1.^\d+$ //匹配非负整数(正整数 + 0) 2.^[0-9]*[1-9][0-9]*$ //匹配正整数 3.^((-\d+)|(0+))$ //匹配非正整数(负整数 + 0) 4.^-[0-9 ...
- Symfony2 Doctrine从现有Database生成Entity(转载自http://blog.it985.com/6809.html)
在我的以前一章Symfony之十分钟入门说了怎样生成数据库,然后设计实体Entity,再同步数据库的表结构,一般我们的顺序都是这样:生成数据库->设计实体Entity->同步数据库表结构. ...
- 根据identifier从StoryBoard中获取对象,UIButton的图片文件位置
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 远程调试 Azure 上的 Website
让我们先检查一下使用的 Azure SDK 版本和 Visual Studio 版本.根据MSDN的介绍,Azure 的远程调试功能是在 Azure SDK 2.2 中加入的,所以请确保您的机器上安装 ...
- unable to find valid certification path to requested target
Error : javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu ...
- 谈谈用SQLite和FMDB而不用Core Data
谈谈用SQLite和FMDB而不用Core Data 发布于:2014-04-22 11:22阅读数:4235 凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他 ...
- LeetCode_Reverse Integer
Reverse digits of an integer. Example1: x = , Example2: x = -, class Solution { public: int reverse( ...
- 《Programming WPF》翻译 第9章 4.模板
原文:<Programming WPF>翻译 第9章 4.模板 对一个自定义元素最后的设计考虑是,它是如何连接其可视化的.如果一个元素直接从FrameworkElement中派生,这将会适 ...
- web字体格式及几种在线格式转换工具介绍
原文地址:http://blog.csdn.net/xiaolongtotop/article/details/8316554 目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字 ...