zoukankan      html  css  js  c++  java
  • C++和Java实现基本的选择排序和常见错误

    一、选择排序的基本思想:

           首先,找到数组中最小的元素,其次将它和数组第一个元素交换位置(如果第一个元素就是最小元素则和自己交换),然后在剩下的元素中找到最小的元素,将它与数组第二个元素交换位置。如此循环,直到将整个数组排序。这种方法叫做选择排序。

           对于长度为N的数组,选择排序需要大约N^2/2次比较和N次交换

    C++代码实现:

    #include<iostream>
    
    using namespace std;
    template<typename T>
    void selectionSort(T a[],int N) {
            for (int i = 0; i < N; i++) {
            
                int min = i;
                for (int j = i + 1; j < N; j++)
                    if (a[min] > a[j])
                        min = j;
                        swap(a[i],a[min]);
            }
        }
    
    
    int main() {
        int arr[10] = { 10,5,2,6,3,4,7,9,8,1 };
        selectionSort(arr,10);
        for (int i = 0; i < 10; i++)
            cout << arr[i] << " ";
        cout << endl;
        system("pause");
    
    }

    Java代码实现:

    package selectionsort;
    
    public class SelectionSort {
        public static void selectionSort(Comparable[] a){
            int N=a.length;
            for(int i=0;i<N;i++){
                int min=i;
                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;
        }
        
        
        
        public static void main(String[] args) {
              Integer[] arr = {4,7,8,3,9,5,6,1,2};  
              SelectionSort.selectionSort(arr);
              for( int i = 0 ; i <arr.length ; i ++ ){
                  System.out.print(arr[i]);
                  System.out.print(' ');
              }
            
        }
    }

    二、常见错误

    问题描述:运行完程序后发现第一个元素与第二个元素没有排好序。如下图

    解决:对于代码selectionSort方法中,if判断语句不要嵌套进第二个for循环中。

              因为第二个for循环是为了寻找与i交换位置的元素,要循环找到后,才能判断它与i的大小关系。

    本博客为博主的学习笔记,不作任何商业用途。
  • 相关阅读:
    面向对象设计技巧[Object Oriented Design Tips] 2
    面向对象设计的技巧[Object Oriented Design Tips]1
    36家示范性软件学院验收的得分排名顺序
    解决windows系统乱码(其实是法语)
    [maven] maven/appfuse 常用命令介绍
    [plsql] win7/64位 PL/SQL登录时报 ora12154无法解析指定的连接标识
    [maven] pom.xml常用配置介绍
    web.xml中classpath:和classpath*:的区别
    [http] 深入理解HTTP消息头
    [Hibernate] Hibernate连接mysql示范
  • 原文地址:https://www.cnblogs.com/guo7533/p/8532628.html
Copyright © 2011-2022 走看看