選擇排序

下面我介紹兩種選擇排序的方法:

     一.選最小的或最大的(我以最小的爲列)

       這種方法的思路爲:

        1.在數組中選出最小的數值,放在a[0]位置。

        2.選出次小的放在a[1]位置。

        3.就這樣一直選,直到排好數列。

實現代碼:

#include<assert.h>
void SelectSort(int *arr, int size )
{
         assert(arr );
         int min;
         for (int i = 0; i < size; i++)
        {
                min = i;
                 //選出最小的數,把最小數的下標給成min
                 for (int j = i + 1; j < size ; j++)
                {
                         if (arr [j]< arr[min])
                        {
                                min = j;
                        }
                }
                 //把最小的數放在i位置
                 int tmp = arr [i];
                 arr[i] = arr [min];
                 arr[min] = tmp;
        }
}
void Print(int *arr, int size )
{
         for (int i = 0; i < size; i++)
        {
                cout << arr[i] << " " ;
        }
        cout << endl;
}

test.cpp

#include<iostream>
using namespace std;
#include "Sort.h"

void Test()
{
	int arr[] = { 3, 9, 7, 6, 1, 2, 4, 8, 0, 5 };
	SelectSort(arr, sizeof(arr) / sizeof(arr[0]));
	Print(arr, sizeof(arr) / sizeof(arr[0]));
}
int main()
{
	Test();
	system("pause");
	return 0;
}

 二、選最大和最小的

     思路:

      1.選出最大最小放在兩邊。

      2.一直這樣選,直到選完爲止。

void SelectSort_OP(int *arr, int size )
{
         assert(arr );
         int left = 0;
         int right = size - 1;
         while (left < right)
        {
                 int min = left;
                 int max = right;
                 //選出最大和最小的放在兩邊,然後縮小區間,循環
                 for (int i = min; i < right; i++)
                {
                         if (arr [i] < arr[min])
                        {
                                swap( arr[i], arr [min]);
                        }
                         else if (arr[i]> arr[max])
                        {
                                swap( arr[i], arr [max]);
                        }
                }
                ++left;
                --right;
        }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章