选择排序:
我创建了一个选择排序算法,但是有人对我说它的选择排序不正确。
如果它不对,那么它的排序类型是什么?以及它与选择排序的不同之处。
代码:
void selection_Sort(int arr[] , int size){
int temp , length = size;
for(int i = 0; i < size ; i++){
for(int j = i + 1; j < size ; j++){
if(arr[i] > arr[j]){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}
请告诉我如何改进它?
答案 0 :(得分:1)
要将此代码转换为selection sort,您必须在内循环中找到最小元素的索引,并在内循环结束后在此索引处使用第i个元素交换元素。
所以掉期总数不超过N(而您当前的代码可以产生大约N ^ 2/2个掉期)
答案 1 :(得分:0)
您已实施冒泡排序。
选择排序意味着您应该在内循环中找到最低(或最大)元素,然后使用元素将其切换到选择边缘的左/右(如图所示)。
有三种类似的排序算法 - 选择排序,插入排序和冒泡排序,你可以看到它们在这里的表现:http://i.imgur.com/fq0A8hx.gif
答案 2 :(得分:0)
var Selectionsort = function (A) {
for (var i = 0; i < A.length; i++) {
var imin = i;
for (var j = i + 1; j <= A.length; j++) {
if (A[j] < A[imin])
imin = j;
}
var tmp = A[i];
A[i] = A[imin];
A[imin] = tmp;
}
return A;
};
var A = [10, 20, 30, 40, 50, 60, 70, 80];
var Aftersorted = Selectionsort(A);
console.log(Aftersorted);
答案 3 :(得分:0)
你可以这样改进:
void selectionSort(double array[], int size) {
int min;
double temp;
for (int step = 0; step < size-1; step++) {
min = step;
for (int i = step+1; i < size; i++) {
if (array [i] < array[min]) {
min = i;
}
}
temp = array[step];
array [step] = array[min];
array [min] = temp;
}
答案 4 :(得分:0)
您必须在外部for循环之后实现一个最小元素。 这是代码:
def selectionSort(arr):
对于范围内的我(len(arr)):
# Find the minimum element in remaining
# unsorted array
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
# Swap the found minimum element with
# the first element
arr[i], arr[min_idx] = arr[min_idx], arr[i]
返回arr arr = [7,4,5,9,8,2,1]
print(selectionSort(arr))
选择排序如何工作?
答案 5 :(得分:0)
将每个与其余的进行比较,并与其余的进行最小交换 在此处尝试以下代码:https://repl.it/@VinitKhandelwal/selection-sort-javascript
function selectionSort(arr){
let min;
let i;
let j;
let temp;
console.log("Input Array");
console.log(arr);
for (i = 0; i < arr.length-1; i++) {
min = i;
for (j = i+1; j < arr.length; j++) {
console.log(arr[i], arr[j]);
if (arr[j] < arr[min]) {
console.log(arr[j]);
min = j;
}
}
if (min !== i) {
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
console.log(arr);
}
}
console.log("Sorted using Selection Sort");
return arr
}
console.log(selectionSort([5,7,6,9,8,2,1,4,3]));
// console.log(selectionSort([1,2,3,4,5,6,7,8,9])); // uncomment to try best case, i.e. sorted
答案 6 :(得分:0)
选择排序基本上是将未排序子数组的第一个元素选为最小值,然后将其与子数组的其他元素进行比较,以找到原始最小值。然后,将该最小元素替换为子数组的第一个元素。仅此而已!
这是我的代码...
#include <stdio.h>
void selectionSort(int n){
int arr[n],i,j,minIndex;
printf("\nInsert %d elements:\n",n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
printf("Insert complete.\n\n");
printf("Your array looks like:\n");
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
//Selection Sort Algorithm
for(i=0;i<n-1;i++){
minIndex = i;
for(j=i+1;j<n;j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
//Swapping elements
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
printf("\n\nAfter sorting your array looks like:\n");
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
}
int main(){
int n;
printf("Enter number of array elements: ");
scanf("%d",&n);
selectionSort(n);
return 0;
}
结果:-