需要了解的几种算法

来源:互联网 发布:python 前端框架 编辑:程序博客网 时间:2024/05/19 15:22

1、选择排序:
对比前一个和后一个元素的大小,记录元素小的下标location,继续对比下标location和再后一个元素,再次记录元素小的下标location;依次比较到最后一个元素,第一轮结束,此时得到最小元素的下标为location,将第一个元素和location的元素进行交换位置,此时最小的元素放在了第一个位置。再次进行第二轮。。。

//选择排序void selectSort(int arr[],int length){    for (int i = 0; i < length; i++) {        int loca = i;        for (int j = i + 1; j < length; j++) {            if (arr[loca] > arr[j]) {                loca = j;            }        }        int temp = arr[i];        arr[i] = arr[loca];        arr[loca] = temp;    }    printf("selectInsert :  ");    printfArrList(arr, length);}

2、插入排序:
将目标元素向已排好的队列中的相应位置插入,依次进行

void insertSort(int arr[],int length){    for (int i = 0; i < length; i++) {        int last = arr[i];//最后一个元素        int temp = arr[i+1];//待比较元素        /*         for() 实现        for (int j = i + 1; j >= 0; j--) {            if (temp < arr[i]) {                arr[i+1] = last;                if (j == 0) {                    arr[j] = temp;                    break;                }            }else{                arr[j] = temp;                break;            }        }         */        //while实现        int j = i + 1;        while (temp < arr[i]) {            arr[i+1] = last;            j--;        }        arr[j] = temp;    }    printf("insertSort :  ");    printfArrList(arr, length);}

3、冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。第一轮结束后,最大的元素在最末的位置,依次进行比较

void bubbleSort(int arr[],int length){    for (int i = 0; i < length; i++) {        for (int j = 0; j < length - i - 1; j++) {            if (arr[j] > arr[j+1]) {                int temp = arr[j+1];                arr[j+1] = arr[j];                arr[j] = temp;            }        }    }    printf("bubbleSort :  ");    printfArrList(arr, length);}

4、快速排序:
选择一个参考数,
通过一趟排序将要排序的数据分割成独立的两部分,参考数的左边都比它小,参考数的右边都比他大,然后再按此方法对参考数两边的数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

void qucikSort_grow(int arr[],int min,int max){    if (max <= min) {        return;    }    int i = min;    int j = max;    int temp = arr[i];    while (i < j) {        while (temp <= arr[j] && i < j) {            j--;        }        arr[i] = arr[j];        while (temp >= arr[i] &&  i < j) {            i++;        }        arr[j] = arr[i];    }    arr[i] = temp;    qucikSort_grow(arr, min, i - 1);    qucikSort_grow(arr, i + 1, max);}//快速排序void qucikSort(int arr[],int length){       qucikSort_grow(arr, 0, length - 1);    printf("qucikSort :  ");    printfArrList(arr, length);}

未完待续

0 0
原创粉丝点击