博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法 - 排序 - 选择排序
阅读量:6174 次
发布时间:2019-06-21

本文共 4018 字,大约阅读时间需要 13 分钟。

每次循环把最小的值往前移

C++代码:

Sorter.hpp

#ifndef _Algorithm_Sorter_H_#define _Algorithm_Sorter_H_template 
class Sorter{public: static void selectionSort(Item a[], int l, int r); static void show(Item a[], int length);private: static void exch(Item &A, Item &B);};template
void Sorter
::show(Item a[], int length){ for (int i = 0; i < length; i++) cout << a[i] << " "; cout << endl;}template
void Sorter
::exch(Item &A, Item &B){ Item t = A; A = B; B = t;}template
void Sorter
::selectionSort(Item a[], int l, int r){ for (int i = l; i < r; i++) { int min = i; for (int j = i + 1; j <= r; j++) if (a[j] < a[min]) min = j; exch(a[i], a[min]); }}#endif

SorterTest.h

#ifndef        _Algorithm_Sorter_Test_H_#define        _Algorithm_Sorter_Test_H_#include "../TestBase.h"class SorterTest : public TestBase{public:    SorterTest(const string &c, const string &d) : TestBase(c, d) { }    void run();private:    void selectionSortTest();};#endif

SorterTest.cpp

#include 
#include
#include "SorterTest.h"#include "Sorter.hpp"using namespace std;void SorterTest::selectionSortTest(){ int *a = new int[10]; for (int i = 0; i < 10; i++) a[i] = 1000 * (1.0*rand() / RAND_MAX); cout << "before sorting..." << endl; Sorter
::show(a, 10); Sorter
::selectionSort(a, 0, 9); cout << "after sorting..." << endl; Sorter
::show(a, 10);}void SorterTest::run(){ printStart("selectionSortTest()"); selectionSortTest(); printEnd("selectionSortTest()");}

运行结果:

---------------- selectionSortTest(): Run Start ----------------
before sorting...
1 563 193 808 585 479 350 895 822 746
after sorting...
1 193 350 479 563 585 746 808 822 895
---------------- selectionSortTest(): Run End ----------------

 

Java代码:

package zeus.algorithm.sort;public class Sorter {    public static void selectionSort(Comparable[] a) { // Sort a[] into increasing order.        int N = a.length; // array length        for (int i = 0; i < N; i++) { // Exchange a[i] with smallest entry in                                                                    // a[i+1...N).            int min = i; // index of minimal entr.            for (int j = i + 1; j < N; j++)                if (less(a[j], a[min]))                    min = j;            exch(a, i, min);        }    }        private static boolean less(Comparable v, Comparable w) {        return v.compareTo(w) < 0;    }    private static void exch(Comparable[] a, int i, int j) {        Comparable t = a[i];        a[i] = a[j];        a[j] = t;    }    private static void show(Comparable[] a) { // Print the array, on a single                                                                                            // line.        for (int i = 0; i < a.length; i++)            System.out.print(a[i] + " ");        System.out.println();    }    private static boolean isSorted(Comparable[] a) {        return isSorted(a, 0, a.length - 1);    }//is the array sorted from a[lo] to a[hi]    private static boolean isSorted(Comparable[] a, int lo, int hi) {        for (int i = lo + 1; i <= hi; i++)            if (less(a[i], a[i - 1]))                return false;        return true;    }        public static void main(String[] args) {         System.out.println("********* Selection Sort *********");                String[] a = { "23", "12", "9", "1", "8", "20" };        selectionSort(a);        System.out.println("Sort By String:");        show(a);                System.out.println("--------------------------------------------");                Integer[] b = { 23, 12, 9, 1, 8, 20 };        selectionSort(b);        System.out.println("Sort By Integer:");        show(b);}

运行结果:

********* Selection Sort *********

Sort By String:
1 12 20 23 8 9
--------------------------------------------
Sort By Integer:
1 8 9 12 20 23

 

转载地址:http://ldqba.baihongyu.com/

你可能感兴趣的文章
堆排序
查看>>
Java的热部署(后期完善)
查看>>
css总结
查看>>
Python学习笔记之六:在VS中调用Python
查看>>
node.js获取参数的常用方法
查看>>
jquery 的 change() 方法的使用
查看>>
本地计算机上的XXX服务启动后又停止了
查看>>
<s:iterator>标签迭代数据不显示
查看>>
判断 SQLServer 触发器类型,支持多行
查看>>
SQL表连接查询(inner join、full join、left join、right join)
查看>>
阿里云OTS(开放结构化数据服务)可视化管理工具的设计和功能介绍
查看>>
Github创建分支
查看>>
转换PHP脚本成为windows的执行程序
查看>>
Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
查看>>
实现iOS7上tableView的切割线像iOS6中的效果
查看>>
使用阿里云接口进行银行卡四要素实名认证
查看>>
聊聊excel生成图片的几种方式
查看>>
20 万网络节点背后的数据创新应用
查看>>
理论 | 朴素贝叶斯模型算法研究与实例分析
查看>>
docker安装gitlab只需要3分钟
查看>>