贪心-选择排序

2018-01-19  本文已影响0人  Co_zy
#include<stdio.h>
void SelectionSort(int *num,int n)
{
 int i = 0;
 int min = 0;
 int j = 0;
 int tmp = 0;
 for(i = 0;i < n-1;i++)
 {
    min = i;//每次讲min置成无序组起始位置元素下标
    for(j = i;j < n;j++)//遍历无序组,找到最小元素。
    {
      if(num[min]>num[j])
      {
       min = j;
      }
    }
    if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
    {
      tmp = num[min];
      num[min] = num[i];
      num[i] = tmp;
    }
 }
}

int main()
{
 int num[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
 int i = 0;
 int length = sizeof(num)/sizeof(int);
 SelectionSort(num,length);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
 for(i = 0;i < length;i++)
 {
   printf("%d ",num[i]);
 }
 return 0;
}

更好理解的代码

#include <iostream>
using namespace std;

int find_max_Pos(int a[],int n)
{
    int pos=0;
    int max = a[0];
    for(int i=0;i<n;i++)
    {
        if(a[i]>max)
        {
            max = a[i];
            pos = i;
        }
    }
    return pos
}

void selectSort(int a[],int n)
{
    while(n>1)
    {
    int pos = find_max_Pos(a,n);
    int tmp = a[pos];
    a[pos] = a[n-1];
    a[n-1] = tmp;
    n--;
    }
}
int main() {
    int a[] = {5,3,2,7,6,1};
    //cout<<find_max_Pos(a,6);
    //cout<<endl;
    selectSort(a,6);
    for(int i=0;i<6;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读