排序算法-C++实现:插入排序,冒泡排序

来源:互联网 发布:腾讯云域名和ip绑定 编辑:程序博客网 时间:2024/06/10 18:36

直接插入排序:
整个序列分为有序区和无序区,取第一个元素作为初始有序区,然后第二个开始,依次插入到有序区的合适位置,直到排好序

void InsertSort(int arr[],int n){    //遍历数组    for(int i=1;i<=n;i++){    //i-1是有序数组的长度,i是需要插入的元素        for(int j=i;j>0;j--){            if(arr[j]<arr[j-1]){                int temp=arr[j];                arr[j]=arr[j-1];                arr[j-1]=temp;            }//将第i个元素和有序区最后一个比较,若小于,则往前插入        }    }}

冒泡排序:比较相邻的元素,如果反序则交换,也分有序区和无序区,初始时,有序区为空,所有元素都在无序区,经过第一趟后能找出最大的元素,然后重复

Void BubbleSort(int arr[],int n){    //遍历整个数组,注意i只能到n-2    for(int i=0;i<n-1;i++){        //除去前i次遍历得到的最大值,i次遍历得到一个最大值,在末尾        for(int j=0;j<n-1-i;j++){            //最大值交换到后面            if(arr[j]>arr[j+1]){                int temp=arr[j];                arr[j]=arr[j+1];                arr[j+1]=temp;            }        }    }}

快速排序:首先选取一个轴值(pivot,基准值),将待排序记录划分成独立的两部分,左轴的元素小于轴值,右侧的大于,然后递归,直到整个序列有序

void Qsort(int a[], int low, int high){    if(low >= high)    {        return;    }    int first = low;    int last = high;    int key = a[first];/*用字表的第一个记录作为枢轴*/    while(first < last)    {        while(first < last && a[last] >= key)        {            --last;        }        a[first] = a[last];/*将比第一个小的移到低端*/        while(first < last && a[first] <= key)        {            ++first;        }        a[last] = a[first];    /*将比第一个大的移到高端*/    }    a[first] = key;/*枢轴记录到位*/    Qsort(a, low, first-1);    Qsort(a, first+1, high);}
阅读全文
1 0
原创粉丝点击