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 }
这篇关于十大排序算法——实现程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!