PHP 정렬 구현

Aug 08, 2016 am 09:30 AM
arr array count return

<?php
002
/**
003
 * 插入排序(一维数组)
004
 * 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
005
 */
006
function insertSort($arr) {
007
    if (!is_array($arr) || count($arr) == 0) {
008
        return $arr;
009
    }
010
    $count = count($arr);
011
    for ($i = 1; $i < $count; $i++) {
012
        if (isset($arr[$i])) {
013
            $tmp = $arr[$i]; //获取后一个元素的值
014
            $j = $i - 1; //获取前面的下标
015
            while ($arr[$j] > $tmp) { //如果前面一个比后面一个大, 这里是从小到大
016
                $arr[$j + 1] = $arr[$j]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个
017
                $arr[$j] = $tmp;
018
                $j--;
019
            }
020
        }
021
    }
022
    return $arr;
023
}
024
 
025
/**
026
 * 选择排序(一维数组)
027
 * 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
028
 */
029
function selectSort($arr) {
030
    if (!is_array($arr) || count($arr) == 0) {
031
        return $arr;
032
    }
033
    $count = count($arr);
034
    for ($i = 0; $i < $count; $i++) {
035
        $k = $i;
036
        for ($j = $i + 1; $j < $count; $j++) {
037
            if ($arr[$k] > $arr[$j])
038
                $k = $j; //找出最小的
039
            if ($k != $i) {
040
                $tmp = $arr[$i];
041
                $arr[$i] = $arr[$k];
042
                $arr[$k] = $tmp;
043
            }
044
        }
045
    }
046
    return $arr;
047
}
048
 
049
/**
050
 * 冒泡排序(一维数组)
051
 * 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止
052
 */
053
function bubbleSort($array) {
054
    $count = count($array);
055
    if ($count <= 0) {
056
        return false;
057
    }
058
    for ($i = 0; $i < $count; $i++) {
059
        for ($j = $count - 1; $j > $i; $j--) {
060
            if ($array[$j] < $array[$j - 1]) { //比较找到的数进行交换
061
                $tmp = $array[$j];
062
                $array[$j] = $array[$j - 1];
063
                $array[$j - 1] = $tmp;
064
            }
065
        }
066
    }
067
    return $array;
068
}
069
 
070
/**
071
 * 快速排序(一维数组)
072
 */
073
function quickSort($array) {
074
    if (count($array) <= 1) {
075
        return $array;
076
    }
077
    $key = $array[0];
078
    $left_arr = array();
079
    $right_arr = array();
080
    for ($i = 1; $i < count($array); $i++) {
081
        if ($array[$i] <= $key) {
082
            $left_arr[] = $array[$i];
083
        } else {
084
            $right_arr[] = $array[$i];
085
        }
086
    }
087
    $left_arr = quickSort($left_arr);
088
    $right_arr = quickSort($right_arr);
089
    return array_merge($left_arr, array(
090
            $key
091
    ), $right_arr);
092
}
093
 
094
/**
095
 * 按照元素的值进行排序
096
 * strOrder 为排列的顺序 asc 升序 desc 降序
097
 */
098
function sortByVal($arr, $strOrder = &#39;asc&#39;) {
099
    if (!is_array($arr) || count($arr) == 0) {
100
        return $arr;
101
    }
102
 
103
    $arrReturn = array();
104
    foreach ($arr as $key => $val) {
105
        $arrKey[] = $key;
106
        $arrVal[] = $val;
107
    }
108
 
109
    $count = count($arrVal);
110
    if ($count) {
111
        //创建key的顺序数组
112
        for ($key = 0; $key < $count; $key++) {
113
            $arrKeyMap[$key] = $key;
114
        }
115
        //对值进行排序
116
        for ($i = 0; $i < $count; $i++) {
117
 
118
            for ($j = $count - 1; $j > $i; $j--) {
119
                //<从小到大排列 升降在这修改
120
                $bol = $strOrder == &#39;asc&#39; ? $arrVal[$j] < $arrVal[$j - 1] : $arrVal[$j] > $arrVal[$j - 1];
121
                if ($bol) {
122
                    $tmp = $arrVal[$j];
123
                    $arrVal[$j] = $arrVal[$j - 1];
124
                    $arrVal[$j - 1] = $tmp;
125
                    //值的冒泡排序,引起key的数组的交互
126
                    $keytmp = $arrKeyMap[$j];
127
                    $arrKeyMap[$j] = $arrKeyMap[$j - 1];
128
                    $arrKeyMap[$j - 1] = $keytmp;
129
                }
130
            }
131
        }
132
        if (count($arrKeyMap)) {
133
            foreach ($arrKeyMap as $val) {
134
                $arrReturn[] = $arrKey[$val];
135
            }
136
        }
137
        return $arrReturn;
138
    }
139
}
140
 
141
/**
142
 * 使用原生的函数进行数组按照值进行排列
143
 */
144
function arraySortByVal($arr, $keys, $type = 'asc') {
145
    $keysvalue = $new_array = array();
146
    foreach ($arr as $k => $v) {
147
        $keysvalue[$k] = $v[$keys];
148
    }
149
    if ($type == 'asc') {
150
        asort($keysvalue);
151
    } else {
152
        arsort($keysvalue);
153
    }
154
    reset($keysvalue);
155
    foreach ($keysvalue as $k => $v) {
156
        $new_array[$k] = $arr[$k];
157
    }
158
    return $new_array;
159
}
로그인 후 복사

제이

위 내용은 내용의 측면을 포함하여 PHP 정렬 구현을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어의 return 사용법에 대한 자세한 설명 C 언어의 return 사용법에 대한 자세한 설명 Oct 07, 2023 am 10:58 AM

C 언어에서 return의 사용법은 다음과 같습니다. 1. 반환 값 유형이 void인 함수의 경우 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 2. 반환 값 유형이 void가 아닌 함수의 경우 return 문은 함수 실행을 종료하는 것입니다. 결과는 호출자에게 반환됩니다. 3. 함수 실행을 조기에 종료합니다. 함수 내부에서는 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 함수가 값을 반환하지 않는 경우.

Java에서 return 및 finally 문의 실행 순서는 무엇입니까? Java에서 return 및 finally 문의 실행 순서는 무엇입니까? Apr 25, 2023 pm 07:55 PM

소스 코드: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# 출력 위 코드의 출력은 간단히 결론을 내릴 수 있습니다. return은 finally 전에 실행됩니다. 바이트코드 수준에서 무슨 일이 일어나는지 살펴보겠습니다. 다음은 case1 메소드의 바이트코드 일부를 가로채서 소스 코드를 비교하여 각 명령어의 의미를 주석으로 표시합니다.

카운트와 카운트의 차이점 카운트와 카운트의 차이점 Nov 20, 2023 am 10:01 AM

Count 함수는 지정된 범위 내의 숫자 수를 계산하는 데 사용됩니다. 텍스트, 논리값 및 Null 값은 무시하지만 빈 셀의 개수는 계산됩니다. Count 함수는 실제 숫자가 포함된 셀의 개수만 계산합니다. CountA 함수는 지정된 범위에서 비어 있지 않은 셀의 수를 계산하는 데 사용됩니다. 실제 숫자가 포함된 셀의 개수뿐만 아니라 텍스트, 논리값 및 수식이 포함된 비어 있지 않은 셀의 개수도 계산됩니다.

C#에서 Array.Sort 함수를 사용하여 배열 정렬 C#에서 Array.Sort 함수를 사용하여 배열 정렬 Nov 18, 2023 am 10:37 AM

제목: Array.Sort 함수를 사용하여 C#에서 배열을 정렬하는 예 텍스트: C#에서는 배열이 일반적으로 사용되는 데이터 구조이므로 배열 정렬 작업이 필요한 경우가 많습니다. C#에서는 배열을 편리하게 정렬할 수 있는 Sort 메서드가 있는 Array 클래스를 제공합니다. 이 문서에서는 C#에서 Array.Sort 함수를 사용하여 배열을 정렬하는 방법을 보여주고 구체적인 코드 예제를 제공합니다. 먼저 Array.Sort 함수의 기본 사용법을 이해해야 합니다. 배열.그래서

PHP array_merge_recursive() 함수를 사용하는 간단하고 명확한 방법 PHP array_merge_recursive() 함수를 사용하는 간단하고 명확한 방법 Jun 27, 2023 pm 01:48 PM

PHP로 프로그래밍할 때 배열을 병합해야 하는 경우가 종종 있습니다. PHP는 배열 병합을 완료하기 위해 array_merge() 함수를 제공하지만, 배열에 동일한 키가 존재할 경우 이 함수는 원래 값을 덮어씁니다. 이 문제를 해결하기 위해 PHP는 배열을 병합하고 동일한 키의 값을 유지할 수 있는 array_merge_recursive() 함수도 언어에 제공하여 프로그램 설계를 더욱 유연하게 만듭니다. array_merge

PHP에서 array_combine 함수를 사용하여 두 배열을 연관 배열로 결합하는 방법 PHP에서 array_combine 함수를 사용하여 두 배열을 연관 배열로 결합하는 방법 Jun 26, 2023 pm 01:41 PM

PHP에는 배열 작업을 더욱 편리하고 빠르게 만들어주는 강력한 배열 함수가 많이 있습니다. 두 배열을 연관 배열로 결합해야 하는 경우 PHP의 array_combine 함수를 사용하여 이 작업을 수행할 수 있습니다. 이 함수는 실제로 한 배열의 키를 다른 배열의 값으로 새로운 연관 배열로 결합하는 데 사용됩니다. 다음으로 PHP에서 array_combine 함수를 사용하여 두 배열을 연관 배열로 결합하는 방법을 설명하겠습니다. array_comb에 대해 알아보기

Vue3는 어떻게 설정 구문 설탕을 사용하여 반환 쓰기를 거부합니까? Vue3는 어떻게 설정 구문 설탕을 사용하여 반환 쓰기를 거부합니까? May 12, 2023 pm 06:34 PM

Vue3.2 설정 구문 설탕은 Vue3.0의 번거로운 설정을 해결하기 위해 단일 파일 구성 요소(SFC)에서 결합된 API를 사용하는 컴파일 타임 구문 설탕입니다. 사용 중 문제점 1. 사용 중에 import로 도입된 선언된 변수, 함수 및 컨텐츠를 반환할 필요가 없습니다. //소개된 컨텐츠 가져오기 import{getToday. }from'./utils'//변수 constmsg='안녕하세요!'//함수 func

JavaScript에서 return 키워드 사용 JavaScript에서 return 키워드 사용 Feb 18, 2024 pm 12:45 PM

JavaScript에서 return을 사용하려면 특정 코드 예제가 필요합니다. JavaScript에서 return 문은 함수에서 반환되는 값을 지정하는 데 사용됩니다. 함수 실행을 종료하는 데 사용할 수 있을 뿐만 아니라 함수가 호출된 위치에 값을 반환할 수도 있습니다. return 문에는 다음과 같은 일반적인 용도가 있습니다. 값 반환 return 문은 함수가 호출된 위치에 값을 반환하는 데 사용할 수 있습니다. 다음은 간단한 예입니다: functionadd(a,b){

See all articles