选择排序C++实现

算法的设计策略:

 

1:蛮力法------穷尽所有可能性

2:递归技术:hanno

3:分治法:分而制之:一分二二分四的思想

4:模拟法:模拟实际场景

5:贪心算法:当前最大利益,例如炒股大多数股民都是考虑当前最大利益

6:优化法:生物学优选原理,例如基因

 

 

 

 

插入、冒泡、选择事件复杂度:O(N^2)

快速排序法:O(N*logN)

 

 

 

 

 

选择排序每次选择一个最小(或最大)的元素放到相应的位置

 

 

Goodcase1:一个桌子上有方块A到方块K13张扑克派,如何排序?

:每次拿剩下的牌中最小的那个放到手里即可即:每次拿最小的那个放到手里当没有牌了排序就完成了。

 

 

 

Goodcase2:一个数组里面有几个423981如何选择排序

11423981

21243982

31234983

41234984

5:123489 8

 

 

算法步骤:

1:i0~N-1

2:找从下标[i]到下标[N-1]的数据中最小元素的位置minPos

3:把最小元素与下标是[i]的元素交换

 

☞:运行结束,好比已经没有扑克牌

代码:

  

#include <iostream> 
#include <ctime> 
using namespace  std; 
//算出运算所用事件 
 
//定义 SelectSort 方法  类型灵活一些 
typedef  int    T; 
void    SelectSort (T*  arr, int num) 
{ 
    int minPos = 0; 
 
    //I:遍历 从0 到num-1(因为最后一个不用比所以为num-1 ,注意个数和坐标最大值之间的换算)  
    for(int i=0; i<num-1; i++) 
    { 
        // 1:确定插入位置(i)位置正巧为i 2:确定最小元素位置 minPos  需要循环判断 
        minPos = i;   //假设第一个是最小的位置
 
        for (int j=i+1; j < num; j++)  //注意j从i后一个开始对边前面  j < num因为要比较最后一项 
        { 
            if(arr[j] < arr[minPos])  //找到最小的
            { 
                minPos = j;     //找到最小的位置 
            } 
 
        }  
        //2:交换minPos 和 插入位置(i)的值 
        swap(arr[minPos], arr[i]); 
    } 
} 
     
 
int main() 
{ 
 //定义102400长度的数组 越长越能计算所需世间   赋值 
    const int kNum = 102400; 
    T arr[kNum]; 
    for (int i=0; i<kNum; i++) 
    { 
        arr[i] = kNum - i; 
    } 
    time_t tStart = time(NULL); 
    SelectSort(arr, kNum); 
    time_t tEnd = time(NULL); 
     
    cout<<"require time:"<<tEnd-tStart <<endl; 
    //打印前十个看看是否完成排序 
    for(int i =0; i<10; i++) 
    { 
        cout<<arr[i]<<"     "; 
    } 
    system("pause"); 
    return 0; 
 
} 

运行结果

 

 

 

 

猜你喜欢

转载自yangbinfx.iteye.com/blog/1768411
今日推荐