Попробовал ChatGPT, первые впечатления:
Попробовал создавать алгоритмы сортировки на Python / Lua / C / C++
Код получается рабочий качество кода можно оценить. Есть тонкости,которые остаются вне восприятия Язык программирования LUA массивы начинаютс с индекса 1 , а не 0. Код не учитывает данные особенности С/C++ не соблюдаются лучшие практики.
Проблема с данным кода выражется довольно просто в Lua массивы начинаются с 1 а не 0 , кусок кода форсирует инициализацию массива с 0.
arr = { [0]
Сортировка Кучами(HeapSort).
function heapify(arr, n, i)
local largest = i
local l = 2 * i + 1
local r = 2 * i + 2
if l < n and arr[l] > arr[largest] then
largest = l
end
if r < n and arr[r] > arr[largest] then
largest = r
end
if largest ~= i then
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
end
end
function heapSort(arr)
local n = #arr
for i = math.floor(n/2), 1, -1 do
heapify(arr, n, i-1)
end
for i = n, 2, -1 do
arr[i], arr[1] = arr[1], arr[i]
heapify(arr, i-1, 0)
end
end
-- ChatGPT 0!!!!!
arr = { [0]= 3, 4, 1, 7, 2, 9, 8, 6}
heapSort(arr)
print("Sorted array is:")
for i = 0, #arr do
print(arr[i])
end
Память или проверки значений для слабаков тот же null и так даллее...
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
Полный код для примера
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quicksort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quicksort(arr, low, pi - 1);
quicksort(arr, pi + 1, high);
}
}
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
Анализировать косяки сильно не хочется ,но понятно что их тут больше. Некоторый код не проходит критику компилятора но это уже отдельная история....
Версия на С++ брат близнец
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int partition(vector<int> &arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]);
return (i + 1);
}
void quicksort(vector<int> &arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quicksort(arr, low, pi - 1);
quicksort(arr, pi + 1, high);
}
}
int main() {
vector<int> arr = {10, 7, 8, 9, 1, 5};
int n = arr.size();
quicksort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
Код в большинстве случаев рабочий. Явных проблем не налюдается
Метод пузырька
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Test the function with an example array
arr = [64, 34, 25, 12, 22, 11, 90]
print("Sorted array is:", bubble_sort(arr))
Некоторые метода не летают :)
# не рабочий код
def cubesort(arr):
def recursion(start, end):
if end - start <= 1:
return
pivot = (end - start + 1) // 3
recursion(start, end - pivot)
recursion(start + pivot, end)
recursion(start, end - pivot)
recursion(0, len(arr) - 1)
return arr
arr = [84,64, 25, 12, 22, 11]
print(cubesort(arr))
Версия 1, 03 Февраля 2023.