选择排序 

  -- 把待排序的n个元素看作 有序部分和无序部分 ,依次选出第 i 小的元素

#include <iostream>
#include<cstdio>

using namespace std;

int main(){
    int a[5] = {4,5,1,3,2} ;
    int i,j ;
    for(i=0; i<5; ++i){
        for(j=i+1;j<5;++j){
            if(a[i]>a[j]){    // 如果找到更小的,交换之
                int t = a[i] ;  
                a[i] = a[j] ;
                a[j] = t ;
            }
        }
    }

    for(i=0; i < 5; ++i)
        printf("%d",a[i]);
    return 0 ;
}

 

冒泡排序

  -- 通过相邻元素之间的比较和交换使较小元素逐渐从后向前移动,就像水底的气泡一样逐渐向上冒。

#include<iostream>
#include<cstdio>
using namespace std ;

int main(){
    int a[6] = {1,4,2,3,6,5} ;
    int temp , n = 6 ;
    for(int i=0;i<n-1;i++){ // n个数, n-1轮冒泡 , 每一轮都将当前最小的数推到最前
        for(int j= n-1 ; j>i ; j--){
            if(a[j]<a[j-i]){ //交换两个数
                temp = a[j];
                a[j] = a[j-1];
                a[j-i] = temp ;
            }
        }

    }
    //  打印排序结果
    for(int i = 0 ; i<n ; i++){
        printf("%d ",a[i]);
    }
    return 0 ;
}

插入排序 --
  把待排序的n个元素看作一个 有序部分和一个 无序排序部分 。 开始时有序部分只有1个元素,无序部分有n-1 个元素。排序过程中每次取出无序部分的第一个元素,将它插入到有序部分的合适位置,使有序部分元素个数增1,经过 n-1 次这样的处理后,有序部分有n个元素,排序结束。

#include<iostream>
#include<cstdio>
using namespace std ;

int main(){
    int a[] = {2,10,4,5,1,9} ; // 待排序元素用一个数组a表示,数组有n个元素
    int temp , n = 6 , j ;
    for(int i = 1 ; i<n ;i++){ // i 表示插入次数,并进行 n-1 次插入
        // 把待排序元素赋给 temp , temp 在 while 循环中并不改变 , 这样方便比较 ,并且它是要插入的元素
        temp = a[i] ;
        j = i -1 ;
        // while 循环的作用是将比当前元素大的元素往后移动一个位置
        while((j>=0)&&(temp<a[j])){
            a[j+1] = a[j];
            j--;  // 顺序比较和移动,依次将元素后移动一个位置
        }
        a[j+1] = temp ; // 元素后移后要插入的位置就空出了,找到该位置插入
    }

    for(int i = 0 ;i<=5;i++){
        printf("%d ", a[i]);
    }

    return 0 ;

}