本文概述
在选择排序中, 在每次遍历中选择数组未排序元素中的最小值, 并将其插入数组的适当位置。
首先, 找到数组的最小元素并将其放在第一个位置。然后, 找到数组的第二个最小元素并将其放在第二个位置。这个过程一直持续到我们得到排序数组为止。
使用选择排序算法的n-1遍对具有n个元素的数组进行排序。
- 在第一遍中, 将找到数组的最小元素及其索引pos。然后, 交换A [0]和A [pos]。因此, 对A [0]进行了排序, 现在我们有n -1个要排序的元素。
- 在第二步中, 找到子数组A [n-1]中存在的最小元素的位置pos。然后, 交换A [1]和A [pos]。因此, 对A [0]和A [1]进行了排序, 现在剩下n-2个未排序的元素。
- 在第n-1次通过中, 将找到A [n-1]和A [n-2]之间较小元素的位置pos。然后, 交换A [pos]和A [n-1]。
因此, 通过遵循上述过程, 对元素A [0], A [1], A [2], …, A [n-1]进行排序。
例
考虑以下包含6个元素的数组。通过使用选择排序对数组的元素进行排序。
A = {10, 2, 3, 90, 43, 56}。
通过 | 发布 | A [0] | A [1] | A2] | A [3] | A [4] | A [5] |
---|---|---|---|---|---|---|---|
1 | 1 | 2 | 10 | 3 | 90 | 43 | 56 |
2 | 2 | 2 | 3 | 10 | 90 | 43 | 56 |
3 | 2 | 2 | 3 | 10 | 90 | 43 | 56 |
4 | 4 | 2 | 3 | 10 | 43 | 90 | 56 |
5 | 5 | 2 | 3 | 10 | 43 | 56 | 90 |
排序的A = {2, 3, 10, 43, 56, 90}
复杂
复杂 | 最好的情况 | 平均情况 | 最差的情况 |
---|---|---|---|
Time | Ω(n) | θ(n2) | o(n2) |
Space | o(1) |
算法
选择排序(ARR, N)
- 步骤1:对于K = 1到N-1, 重复步骤2和3
- 步骤2:呼叫最小(ARR, K, N, POS)
- 第3步:用ARR [POS]交换A [K] [LOOP结束]
- 步骤4:退出
最小(ARR, K, N, POS)
- 第1步:[初始化]设置小= ARR [K]
- 步骤2:[INITIALIZE] SET POS = K
- 步骤3:对J = K + 1到N -1重复, 如果SMALL> ARR [J] SET SMALL = ARR [J] SET POS = J [IF结束] [LOOP结束]
- 步骤4:退回POS
C程序
#include<stdio.h>
int smallest(int[], int, int);
void main ()
{
int a[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
int i, j, k, pos, temp;
for(i=0;i<10;i++)
{
pos = smallest(a, 10, i);
temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
printf("\nprinting sorted elements...\n");
for(i=0;i<10;i++)
{
printf("%d\n", a[i]);
}
}
int smallest(int a[], int n, int i)
{
int small, pos, j;
small = a[i];
pos = i;
for(j=i+1;j<10;j++)
{
if(a[j]<small)
{
small = a[j];
pos=j;
}
}
return pos;
}
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
C ++程序
#include<iostream>
using namespace std;
int smallest(int[], int, int);
int main ()
{
int a[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
int i, j, k, pos, temp;
for(i=0;i<10;i++)
{
pos = smallest(a, 10, i);
temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
cout<<"\n printing sorted elements...\n";
for(i=0;i<10;i++)
{
cout<<a[i]<<"\n";
}
return 0;
}
int smallest(int a[], int n, int i)
{
int small, pos, j;
small = a[i];
pos = i;
for(j=i+1;j<10;j++)
{
if(a[j]<small)
{
small = a[j];
pos=j;
}
}
return pos;
}
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
Java程序
public class SelectionSort {
public static void main(String[] args) {
int[] a = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
int i, j, k, pos, temp;
for(i=0;i<10;i++)
{
pos = smallest(a, 10, i);
temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
System.out.println("\nprinting sorted elements...\n");
for(i=0;i<10;i++)
{
System.out.println(a[i]);
}
}
public static int smallest(int a[], int n, int i)
{
int small, pos, j;
small = a[i];
pos = i;
for(j=i+1;j<10;j++)
{
if(a[j]<small)
{
small = a[j];
pos=j;
}
}
return pos;
}
}
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
C#程序
using System;
public class Program
{
public void Main() {
int[] a = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
int i, pos, temp;
for(i=0;i<10;i++)
{
pos = smallest(a, 10, i);
temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
Console.WriteLine("\nprinting sorted elements...\n");
for(i=0;i<10;i++)
{
Console.WriteLine(a[i]);
}
}
public static int smallest(int[] a, int n, int i)
{
int small, pos, j;
small = a[i];
pos = i;
for(j=i+1;j<10;j++)
{
if(a[j]<small)
{
small = a[j];
pos=j;
}
}
return pos;
}
}
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
Python程序
def smallest(a, i):
small = a[i]
pos=i
for j in range(i+1, 10):
if a[j] < small:
small = a[j]
pos = j
return pos
a=[10, 9, 7, 101, 23, 44, 12, 78, 34, 23]
for i in range(0, 10):
pos = smallest(a, i)
temp = a[i]
a[i]=a[pos]
a[pos]=temp
print("printing sorted elements...")
for i in a:
print(i)
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
休息计划
fn main ()
{
let mut a: [i32;10] = [10, 9, 7, 101, 23, 44, 12, 78, 34, 23];
for i in 0..10
{
let mut small = a[i];
let mut pos = i;
for j in (i+1)..10
{
if a[j]<small
{
small = a[j];
pos=j;
}
}
let mut temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
println!("\nprinting sorted elements...\n");
for i in &a
{
println!("{}", i);
}
}
输出:
printing sorted elements...
7
9
10
12
23
23
34
44
78
101
JavaScript程序
<html>
<head>
<title>
Selection Sort
</title>
</head>
<body>
<script>
function smallest(a, n, i)
{
var small = a[i];
var pos = i;
for(j=i+1;j<10;j++)
{
if(a[j]<small)
{
small = a[j];
pos=j;
}
}
return pos;
}
var a = [10, 9, 7, 101, 23, 44, 12, 78, 34, 23];
for(i=0;i<10;i++)
{
pos = smallest(a, 10, i);
temp = a[i];
a[i]=a[pos];
a[pos] = temp;
}
document.writeln("printing sorted elements ...\n"+"<br>");
for(i=0;i<10;i++)
{
document.writeln(a[i]+"<br>");
}
</script>
</body>
</html>
输出:
printing sorted elements ...
7
9
10
12
23
23
34
44
78
101
PHP程序
<html>
<head>
<title>Selection sort</title>
</head>
<body>
<?php
function smallest($a, $n, $i)
{
$small = $a[$i];
$pos = $i;
for($j=$i+1;$j<10;$j++)
{
if($a[$j]<$small)
{
$small = $a[$j];
$pos=$j;
}
}
return $pos;
}
$a = array(10, 9, 7, 101, 23, 44, 12, 78, 34, 23);
for($i=0;$i<10;$i++)
{
$pos = smallest($a, 10, $i);
$temp = $a[$i];
$a[$i]=$a[$pos];
$a[$pos] = $temp;
}
echo "printing sorted elements ...\n";
for($i=0;$i<10;$i++)
{
echo $a[$i];
echo "\n";
}
?>
</body>
</html>
输出:
printing sorted elements ...
7
9
10
12
23
23
34
44
78
101
评论前必须登录!
注册