首页 > 代码库 > 第四篇、快速、冒泡、选择、插入排序

第四篇、快速、冒泡、选择、插入排序

1.快速排序

  实现:

    1.取中间一个数作为支点

    2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边

    3.左右两边再用递归排序,就可以完成排序操作

    技术分享

/***@brief 快速排序*@params arr 数组 left 起始位置 right总点位置*/void  quickSort(int arr[],int left,int right){    int i = left;    int j = right;    int pivot = arr[(left + right) / 2]; // 支点   while(i <= j)     {        while(arr[i] < pivot)        {            i++;        }        while(arr[j] > pivot)         {            j--;        }         if(i<=j)        {            int temp = arr[i];            arr[i] = arr[j];            arr[j] = temp;            i++;            j--;        }         }      // 递归    if(left < j)      {            quickSort(arr,left,j);       }                if(i < right)        {            quickSort(arr,i,right);        }}

 

2.冒泡排序

  原理:如果当前这个数比下一个数大,则交换位置,经过一次之后最大的数就排到了数组的末尾,以此类推

void bubble(inti arr[],int n){    int i ;    int temp;    for(i=0;i<n-1;i++)    {        if(arr[i] > arr[i + 1])        {            temp = arr[i];            arr[i] = arr[i + 1];            arr[i + 1] = temp;        }    }}void bubbleSort(int arr[],int n){    int i;    for(i = n; i>=1; i--)    {        bubble(arr,i);    }}

 

3.选择排序

  思路:

    1.首先在数组中找到最大值并记录其下标

    2.然后最大值与数组下标为n-1的交换。

int findMaxPos(int arr[],int n){    int i;    int max = arr[0];    int pos = 0;    for(int i = 0; i<n; i++)    {        if(arr[i] > max)        {            pos = i;             max = arr[i];        }    }    return pos;}void selectSort(int arr[],int n){    while(n > 1)    {        int pos = findMaxPos(arr,n);        int temp = arr[pos];        arr[pos] = arr[n - 1];        arr[n - 1] = temp;        n--;    }}

 

4.插入排序

  思路:

  1.首要条件:两个数及以上

  2.取到当前要插入的元素,以前面一个比较,如果小于前面,则需要把前面的大数移位,直到不满足小于的条件,插入相应的位置

void insert(int arr[],int n){    int key = arr[n];    int i = n;    while(arr[i - 1] > key)    {        arr[i] = arr[i - 1];        i--;        if(i == 0)        {            break;        }    }    arr[i] = key;}void insertionSort(int arr[],int n){    int i;    for(i=1; i< n; i++)    {        insert(arr,i);    }}

 

第四篇、快速、冒泡、选择、插入排序