冒泡排序、选择排序、插入排序、快速排序

来源:互联网 发布:js 屏幕手写板 编辑:程序博客网 时间:2024/06/02 05:16

1、冒泡排序:n个数比较n-1次,每次在无序序列中两两进行比较,把最值沉底。

//升序void BubbleSort(int a[], int n){    for(int i = 0; i < n-1; i++){        for(int j = 0; j < n-1-i; j++){            if(a[j] > a[j+1]){                int t = a[j];                a[j] = a[j+1];                a[j+1] = t;            }        }    }}

2、选择排序:n个数选择n-1次,每次选出一个最值和无序序列的第一个数交换。

//升序void SelectSort(int a[], int n){    for(int i = 0; i < n-1; i++){        int k = i;        for(int j = i+1; j < n; j++){           if(a[j] < a[k]) k = j;        }        if(k != i){            int t = a[k];            a[k] = a[i];            a[i] = t;        }    }}

3、插入排序:将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。该算法的特点是在寻找插入位置的同时完成元素的移动。因此元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。

//升序void InsertSort(int a[], int n){    for(int i = 1; i< n; i++){        int t = a[i],j;        for(j = i-1; j>=0 && t < a[j]; j--){            a[j+1] = a[j];        }        a[j+1] = t;    }} 

4、快速排序:在序列中随便找一个数作为基准数,将所有比基准数大的数放在基准数的右边,比基准数小的数放在基准数的左边。

//升序void QuickSort(int a[], int left, int right){ //[left,right]    if(left < right){        int key = a[left]; //key为基准数        int low = left;        int high = right;        while(low < high){            while(low < high && a[high] >= key){                    high--;            }            a[low] = a[high];            while(low < high && a[low] <= key){                    low++;            }           a[high] = a[low];        }        a[low] = key;        QuickSort(a,left,low-1);        QuickSort(a,low+1,right);    }}
阅读全文
1 0
原创粉丝点击