选择排序算法

时间:2016-04-18 17:43:02

标签: algorithm sorting

选择排序:

sorting algorithm

我创建了一个选择排序算法,但是有人对我说它的选择排序不正确。

如果它不对,那么它的排序类型是什么?以及它与选择排序的不同之处。

代码:

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;
            }   
        }
    }
}

请告诉我如何改进它?

7 个答案:

答案 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))

选择排序如何工作?

  1. 从第一个元素开始,我们搜索数组中最小的元素,并将其替换为第一个位置的元素。
  2. 然后我们移至第二个位置,并寻找子数组中存在的最小元素,从索引1开始,直到最后一个索引。
  3. 我们将原始数组中第二个位置的元素替换为第二个最小元素,或者可以说在子数组中第一个位置。 4.重复此操作,直到数组完全排序为止。

答案 5 :(得分:0)

选择用Java排序

将每个与其余的进行比较,并与其余的进行最小交换 在此处尝试以下代码: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)

选择以C排序

选择排序基本上是将未排序子数组的第一个元素选为最小值,然后将其与子数组的其他元素进行比较,以找到原始最小值。然后,将该最小元素替换为子数组的第一个元素。仅此而已!

这是我的代码...

#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;
}

结果:-

enter image description here