PHP sorting algorithm class example_PHP tutorial

WBOY
Release: 2016-07-13 09:50:10
Original
795 people have browsed it

PHP sorting algorithm class example

This article describes the PHP sorting algorithm class through examples. Share it with everyone for your reference. The details are as follows:

PHP implementation of four sorting algorithms:

 1) The basic idea of ​​Insertion Sort is:

Each time a record to be sorted is inserted into the appropriate position in the previously sorted sub-file according to its key size, until all records are inserted.

2) The basic idea of ​​Selection Sort is:

In each pass, the record with the smallest keyword is selected from the records to be sorted, and the order is placed at the end of the sorted sub-file until all records are sorted.

3) The basic idea of ​​bubble sort is:

Compare the keywords of the records to be sorted pairwise. If it is found that the order of the two records is reversed, the order will be exchanged until there are no records in the reverse order.

4) Quick sort is essentially the same as bubble sort, and is an application of exchange sort. So the basic idea is the same as the bubble sort above.

1. The sort.php file is as follows:

 ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179



/**

*

* @author quanshuidingdang

*/

class Sort {

private $arr = array();

private $sort = 'insert';

private $marker = '_sort';

private $debug = TRUE;

/**

* Constructor

*

* @param array For example:

$config = array (

'arr' => array(22,3,41,18) , //Array values ​​that need to be sorted

'sort' => 'insert', //Possible values: insert, select, bubble, quick

'debug' => TRUE //Possible values: TRUE, FALSE

)

*/

public function __construct($config = array()) {

if ( count($config) > 0) {

$this->_init($config);

}

}

/**

* Get sorted results

*/

public function display() {

return $this->arr;

}

/**

* Initialization

*

* @param array

* @return bool

*/

private function _init($config = array()) {

//参数判断

if ( !is_array($config) OR count($config) == 0) {

if ($this->debug === TRUE) {

$this->_log("sort_init_param_invaild");

}

return FALSE;

}

//初始化成员变量

foreach ($config as $key => $val) {

if ( isset($this->$key)) {

$this->$key = $val;

}

}

//调用相应的成员方法完成排序

$method = $this->sort . $this->marker;

if ( ! method_exists($this, $method)) {

if ($this->debug === TRUE) {

$this->_log("sort_method_invaild");

}

return FALSE;

}

if ( FALSE === ($this->arr = $this->$method($this->arr)))

return FALSE;

return TRUE;

}

/**

* Insertion sort

*

* @param array

* @return bool

*/

private function insert_sort($arr) {

//参数判断

if ( ! is_array($arr) OR count($arr) == 0) {

if ($this->debug === TRUE) {

$this->_log("sort_array(insert)_invaild");

}

return FALSE;

}

//具体实现

$count = count($arr);

for ($i = 1; $i < $count; $i ) {

$tmp = $arr[$i];

for($j = $i-1; $j >= 0; $j--) {

if($arr[$j] > $tmp) {

$arr[$j 1] = $arr[$j];

$arr[$j] = $tmp;

}

}

}

return $arr;

}

/**

* Select sort

*

* @param array

* @return bool

*/

private function select_sort($arr) {

//参数判断

if ( ! is_array($arr) OR count($arr) == 0) {

if ($this->debug === TRUE) {

$this->_log("sort_array(select)_invaild");

}

return FALSE;

}

//具体实现

$count = count($arr);

for ($i = 0; $i < $count-1; $i ) {

$min = $i;

for ($j = $i 1; $j < $count; $j ) {

if ($arr[$min] > $arr[$j]) $min = $j;

}

if ($min != $i) {

$tmp = $arr[$min];

$arr[$min] = $arr[$i];

$arr[$i] = $tmp;

}

}

return $arr;

}

/**

* 冒泡排序

*

* @param array

* @return bool

*/

private function bubble_sort($arr) {

//参数判断

if ( ! is_array($arr) OR count($arr) == 0) {

if ($this->debug === TRUE) {

$this->_log("sort_array(bubble)_invaild");

}

return FALSE;

}

//具体实现

$count = count($arr);

for ($i = 0; $i < $count; $i ) {

for ($j = $count-1; $j > $i; $j--) {

if ($arr[$j] < $arr[$j-1]) {

$tmp = $arr[$j];

$arr[$j] = $arr[$j-1];

$arr[$j-1] = $tmp;

}

}

}

return $arr;

}

/**

* Quick sort

*

* @param array

* @return bool

*/

private function quick_sort($arr) {

//具体实现

if (count($arr) <= 1) return $arr;

$key = $arr[0];

$left_arr = array();

$right_arr = array();

for ($i = 1; $i < count($arr); $i ){

if ($arr[$i] <= $key)

$left_arr[] = $arr[$i];

else

$right_arr[] = $arr[$i];

}

$left_arr = $this->quick_sort($left_arr);

$right_arr = $this->quick_sort($right_arr);

 

return array_merge($left_arr, array($key), $right_arr);

}

/**

* Logging

*/

private function _log($msg) {

$msg = 'date[' . date('Y-m-d H:i:s') . '] ' . $msg . 'n';

return @file_put_contents('sort_err.log', $msg, FILE_APPEND);

}

}

/*End of file sort.php*/

/*Location htdocs/sort.php */

  2. sort_demo.php文件如下:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14



require_once('sort.php');

$config = array (

'arr' => array(23, 22, 41, 18, 20, 12, 200303,2200,1192) ,

//需要排序的数组值

'sort' => 'select',

//可能值: insert, select, bubble, quick

'debug' => TRUE

//可能值: TRUE, FALSE

);

$sort = new Sort($config);

//var_dump($config['arr']);

var_dump($sort->display());

/*End of php*/

1

2 3

45 6 7 8 9 10
11
12
13 14
 <🎜>require_once('sort.php');<🎜> <🎜>$config = array (<🎜> <🎜>'arr' => array(23, 22, 41, 18, 20, 12, 200303,2200,1192) , //需要排序的数组值 'sort' => 'select', //可能值: insert, select, bubble, quick 'debug' => TRUE //可能值: TRUE, FALSE ); $sort = new Sort($config); //var_dump($config['arr']); var_dump($sort->display()); /*End of php*/   希望本文所述对大家的php程序设计有所帮助。 http://www.bkjia.com/PHPjc/1018376.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1018376.htmlTechArticlePHP排序算法类实例 本文实例讲述了PHP排序算法类。分享给大家供大家参考。具体如下: 四种排序算法的PHP实现: 1) 插入排序(Insertion Sort...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template