numpy选取三种排序算法(冒泡排序除外),对列表排序。
时间: 2023-05-20 22:01:34 浏览: 57
可以使用numpy中的sort函数,它支持多种排序算法,包括快速排序、归并排序和堆排序。下面是一个示例代码:
import numpy as np
# 生成一个随机列表
arr = np.random.randint(0, 100, size=10)
# 使用快速排序算法对列表排序
arr_quick = np.sort(arr, kind='quicksort')
# 使用归并排序算法对列表排序
arr_merge = np.sort(arr, kind='mergesort')
# 使用堆排序算法对列表排序
arr_heap = np.sort(arr, kind='heapsort')
print("原始列表:", arr)
print("快速排序结果:", arr_quick)
print("归并排序结果:", arr_merge)
print("堆排序结果:", arr_heap)
相关问题
numpy.选取三种排序算法(冒泡排序除外),对列表排序。
好的,以下是三种排序算法的代码:
1. 快速排序
```python
import numpy as np
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
arr = np.random.randint(0, 100, 10)
print("原始数组:", arr)
print("快速排序后:", quick_sort(arr))
```
2. 归并排序
```python
import numpy as np
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
arr = np.random.randint(0, 100, 10)
print("原始数组:", arr)
print("归并排序后:", merge_sort(arr))
```
3. 堆排序
```python
import numpy as np
def heap_sort(arr):
n = len(arr)
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
for i in range(n - 1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
def heapify(arr, n, i):
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and arr[l] > arr[largest]:
largest = l
if r < n and arr[r] > arr[largest]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
arr = np.random.randint(0, 100, 10)
print("原始数组:", arr)
heap_sort(arr)
print("堆排序后:", arr)
```
python numpy三维数组排序
你可以使用 numpy 的 sort 函数进行三维数组排序。按照某个维度排序只需要设置 axis 参数即可。以下是一个示例代码,其中我们对一个 3x3x3 的三维数组按照第二维进行排序:
```python
import numpy as np
arr = np.array([[[9, 8, 7], [6, 5, 4], [3, 2, 1]],
[[12, 11, 10], [15, 14, 13], [18, 17, 16]],
[[21, 20, 19], [24, 23, 22], [27, 26, 25]]])
sorted_arr = np.sort(arr, axis=1)
print(sorted_arr)
```
输出结果:
```
[[[ 3 2 1]
[ 6 5 4]
[ 9 8 7]]
[[12 11 10]
[15 14 13]
[18 17 16]]
[[21 20 19]
[24 23 22]
[27 26 25]]]
```
如果你想按照其他维度排序,只需要改变 axis 参数即可。例如按照第三维排序:
```python
import numpy as np
arr = np.array([[[9, 8, 7], [6, 5, 4], [3, 2, 1]],
[[12, 11, 10], [15, 14, 13], [18, 17, 16]],
[[21, 20, 19], [24, 23, 22], [27, 26, 25]]])
sorted_arr = np.sort(arr, axis=2)
print(sorted_arr)
```
输出结果:
```
[[[ 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]]]
```
如果你想获取排序后的索引,可以使用 argsort 函数,例如:
```python
import numpy as np
arr = np.array([[[9, 8, 7], [6, 5, 4], [3, 2, 1]],
[[12, 11, 10], [15, 14, 13], [18, 17, 16]],
[[21, 20, 19], [24, 23, 22], [27, 26, 25]]])
sorted_indices = np.argsort(arr, axis=2)
print(sorted_indices)
```
输出结果:
```
[[[2 1 0]
[2 1 0]
[2 1 0]]
[[2 1 0]
[2 1 0]
[2 1 0]]
[[2 1 0]
[2 1 0]
[2 1 0]]]
```