zoukankan      html  css  js  c++  java
  • 十大排序算法——实现程序

      1 //冒泡排序
      2 //它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来
      3 //每循环一次,最大值移到最右边
      4 void bubble_sort(int* arr, int len) {
      5     int i, j, temp;
      6     for (i = 0; i < len - 1; i++) {
      7         for (j = 0; j < len - 1 - i; j++) {
      8             if (arr[j] > arr[j + 1]) {
      9                 temp = arr[j + 1];
     10                 arr[j + 1] = arr[j];
     11                 arr[j] = temp;
     12             }
     13         }
     14     }
     15 }
     16 
     17 
     18 //选择排序
     19 //首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
     20 //然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
     21 //以此类推,直到所有元素均排序完毕。
     22 void selection_sort(int* arr, int len) {
     23     int i, j, temp, min;
     24     for (i = 0; i < len; i++) {
     25         min = i;
     26         for (j = i; j < len; j++) {
     27             if (arr[min] > arr[j]) {
     28                 min = j;
     29             }
     30         }
     31         if (min != i) {
     32             temp = arr[min];
     33             arr[min] = arr[i];
     34             arr[i] = temp;
     35         }
     36     }
     37 }
     38 
     39 
     40 //插入排序
     41 //通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
     42 void insert_sort(int* arr, int len) {
     43     int temp, i, j;
     44     for (i = 1; i < len; i++) {
     45         temp = arr[i];
     46         for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
     47             arr[j + 1] = arr[j];
     48         }
     49         arr[j + 1] = temp;
     50     }
     51 }
     52 
     53 
     54 //希尔排序——进阶版插入排序
     55 //先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,
     56 //待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序
     57 void shell_sort(int* arr, int len) {
     58     int i, j, gap;
     59     int temp;
     60     for (gap = len >> 1; gap > 0; gap >>= 1) {
     61         for (i = gap; i < len; i++) {
     62             temp = arr[i];
     63             for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
     64                 arr[j + gap] = arr[j];
     65             }
     66             arr[j + gap] = temp;
     67         }
     68     }
     69 }
     70 
     71 
     72 //快速排序——递归法
     73 void swap(int* a, int* b) { //交换数值
     74     int temp = *a;
     75     *a = *b;
     76     *b = temp;
     77 }
     78 
     79 void quick_sort_recursive(int *arr, int start, int end) {
     80     if (start >= end) {
     81         return;
     82     }
     83     int mid = arr[end];
     84     int left = start, right = end - 1;
     85     while (left < right) {
     86         while (arr[left] < mid && left < right) {
     87             left++;
     88         }
     89         while (arr[right] > mid && left < right) {
     90             right--;
     91         }
     92         swap(&arr[left], &arr[right]);
     93     }
     94     if (arr[left] > arr[end]) {
     95         swap(&arr[left], &arr[end]);
     96     }
     97     else
     98     {
     99         left++;
    100     }
    101     if (left) {
    102         quick_sort_recursive(arr, start, left - 1);
    103     }
    104     quick_sort_recursive(arr, left + 1, end);
    105 }
    106 
    107 void quick_sort(int* arr, int len) {
    108     quick_sort_recursive(arr, 0, len - 1);
    109 }
    110 
    111 
    112 //计数排序
    113 void counting_sort(int* arr, int *sorted_arr, int len) {
    114     int* count_arr = (int*)malloc(sizeof(int) * 100);
    115     memset(count_arr, 0, sizeof(int) * 100);
    116     int k = 0;
    117     for (int i = 0; i < len; i++) {
    118         count_arr[arr[i]]++;
    119     }
    120     for (int j = 0; j < 100; j++) {
    121         while (count_arr[j] != 0) {
    122             sorted_arr[k++] = j;
    123             count_arr[j]--;
    124         }
    125     }
    126     free(count_arr);
    127 }
  • 相关阅读:
    aspjpeg 组件在asp中的使用
    C# 使用 fckeditor 上传文件中文名乱码的问题---转
    我来挑战主页绑定,浏览器被绑架之终极方案!
    nginx简易配置
    树莓派安装中文输入法
    树莓派4超频至2.0GHz
    python3 requests使用连接池
    python3 语言特性5
    git日常使用
    python3 时间格式化
  • 原文地址:https://www.cnblogs.com/demo-lv/p/15201954.html
Copyright © 2011-2022 走看看