新手讲算法 冒泡排序,插入排序,选择排序

1.冒泡排序

(1)每次比较相邻的两个元素,按照对应的顺序进行交换

(2)遍历的次数是  n 次,每次遍历进行的比较次数 是 n次,所以复杂度  n*n

(3)进行优化:如果某一次比较之后,没有一次交换,说明此时数组已经有序了

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

void swap(int *a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

void bubbleSort(int *a, int N) {
    for(int i = 0; i < N; i++) {
        int flag = false;
        for(int j = 0; j < N - 1 - i; j++) {
            if(a[j] > a[j + 1]) {
                swap(a, j, j + 1);
                flag = true;
            }
        }
        if(!flag) {
            return;
        }
    }
}

int main(){
    int N;
    cin>> N;
    int *a;
    a = new int[N];
    for(int i = 0; i < N; i++) {
        cin>>a[i];
    }
    
    bubbleSort(a, N);
    
    for(int i = 0; i < N; i++) {
        cout<<a[i]<<' ';
    }
    
    return 0;
}

 

2.插入排序

(1)不停地将  数字插入到  前面已经有序的数组中

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

void swap(int *a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

void insertSort(int *a, int N) {
    for(int i = 0; i < N - 1; i++) {
        for(int j = i + 1; j > 0; j--) {
            if(a[j] < a[j - 1 ]) {
                swap(a, j, j - 1);
            } else {
                break;
            }
        }
    }
}

int main(){
    int N;
    cin>> N;
    int *a;
    a = new int[N];
    for(int i = 0; i < N; i++) {
        cin>>a[i];
    }
    
    insertSort(a, N);
    
    for(int i = 0; i < N; i++) {
        cout<<a[i]<<' ';
    }
    
    return 0;
}

  

3.选择排序

(1)每一次选择剩余数组中的一个最小的数字,按顺序放到该放的位置上

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

void swap(int *a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

void chooseSort(int *a, int N) {
    for(int i = 0; i < N; i++) {
        //记最下的坐标
        int min = i;
        for(int j = i; j < N; j++) {
            if(a[j] < a[min]) {
                min = j;
            }
        }
        swap(a, i, min);
    }
}

int main(){
    int N;
    cin>> N;
    int *a;
    a = new int[N];
    for(int i = 0; i < N; i++) {
        cin>>a[i];
    }
    
    chooseSort(a, N);
    
    for(int i = 0; i < N; i++) {
        cout<<a[i]<<' ';
    }
    
    return 0;
}

  

posted @ 2018-04-01 14:27  jiguojing  阅读(150)  评论(0编辑  收藏  举报