文章目录
选择排序
C++
简单选择排序
#include <iostream>
#define N 10
using namespace std;
void selectSort(int r[], int n)
{
int i, j, minIndex;
for (i = 0; i < n - 1; i++)
{
minIndex = i;
for (j = i + 1; j < n; j++)
{
if (r[minIndex] > r[j])
{
minIndex = j;
}
}
if (minIndex != i)
{
swap(r[i], r[minIndex]);
}
}
}
int main()
{
int numbers[N] = { 3,2,1,5,6,2,8,6,9,7 };
selectSort(numbers, N);
for (int i = 0; i < N; i++)
cout << numbers[i] << " ";
cout << "\n";
return 0;
}
堆排序
#include <iostream>
#define N 10
using namespace std;
void sink(int r[], int k, int n)
{
int j;
while (2 * k + 1 < n)
{
j = 2 * k + 1;
if (j + 1 < n && r[j] < r[j + 1])j++;
if (r[k] >= r[j]) break;
else swap(r[k], r[j]);
k = j;
}
}
void heapSort(int r[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--) sink(r, i, n);
while (n > 0)
{
swap(r[0], r[n - 1]);
n--;
sink(r, 0, n);
}
}
int main()
{
int numbers[N] = { 3,2,1,5,6,2,8,6,9,7 };
heapSort(numbers, N);
for (int i = 0; i < N; i++)
cout << numbers[i] << " ";
cout << "\n";
return 0;
}
python
简单选择排序
def select_sort(r, n):
for i in range(n - 1):
min_index = i
for j in range(i + 1, n):
if r[j] < r[min_index]:
min_index = j
if (min_index != i):
r[i], r[min_index] = r[min_index], r[i]
if __name__ == '__main__':
r = [3, 2, 1, 5, 6, 2, 8, 6, 9, 7]
select_sort(r, len(r))
print(r)
堆排序
def sink(r, k, n):
while 2 * k + 1 < n:
j = 2 * k + 1
if (j + 1 < n) and (r[j] < r[j + 1]):
j += 1
if r[k] < r[j]:
r[k], r[j] = r[j], r[k]
else:
break
k = j
def heap_sort(r, n):
for i in range(int(n / 2) - 1, -1,-1):
sink(r, i, n)
while n > 0:
r[0], r[n - 1] = r[n - 1], r[0]
n -= 1
sink(r, 0, n)
if __name__ == '__main__':
r = [3, 2, 1, 5, 6, 2, 8, 6, 9, 7]
heap_sort(r, len(r))
print(r)