基础排序算法:冒泡法,选择法,直接插入法,归并排序法
来源:互联网 发布:matlab socket编程实例 编辑:程序博客网 时间:2024/06/07 05:10
冒泡排序:
/* * 冒泡法: * 每次将相邻数中的较小值排到较大值的前面 * 直到无需再交换为止 * */#include <iostream>using namespace std;template<typename T>inline void bubbleSort(T arr[], size_t len){T temp;for (size_t i = 0; i < len-1; i++) {for (size_t j = len-1; j > i; j--) {if (arr[j-1] > arr[j]) { //逐次将相邻数的较小值和较大值间进行交换//使最小值被交换到最前面temp = arr[j-1];arr[j-1] = arr[j];arr[j] = temp;}}}for (size_t i = 0; i < len; i++)cout << arr[i] << " ";}int main(int argc, char **argv){int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};size_t len = sizeof(array)/sizeof(*array);bubbleSort(array, len);return 0;}
选择排序:
/* * 选择排序: * 每次遍历数组,找出未排序部分的最小值 * 将其继续排到已排好序部分的后面 * */template<typename T>inline void selectionSort(T arr[], int len){T temp;int min;for (int i = 0; i < len - 1; i++) {min = i; //当前的最小值下标(未排序状态)for (int j = i + 1; j < len; j++) {if (arr[min] > arr[j])min = j;//遍历未排序部分的元素,找到最小值的小标}if (min != i) { //把已找到的目前最小值排到已排好序的数组后面temp = arr[min];arr[min] = arr[i];arr[i] = temp;}}for (int n = 0; n < len; n++)cout << arr[n] << " ";}
直接插入法:
/* * 插入排序: * 从左到右遍历数组,将每个元素插入到合适的位置 * */void insertionSort(int arr[], int len){int i, j, key;for (i = 1; i < len; i++) {key = arr[i];//从数组的0下标开始找到第一个比arr[i]大的数arr[j]//将a[i]~a[j]之间的全部元素后移,然后将arr[i]放到原arr[j]的位置for (j = i-1; j >= 0 && arr[j] > key; j--) {arr[j+1] = arr[j];}arr[j+1] = key;}for (int i = 0; i < len; i++)cout << arr[i] << " ";}
归并排序1(递归版本):
#include <iostream>using namespace std;/* * 排序需要原数组,同时还需要借助一个数组 * */void merge(int arr[], int start, int mid, int end, int temp[])//把已排好序的两小部分拼接起来{int i = start, j = mid+1, k = 0;while (i <= mid && j <= end) {if (arr[i] > arr[j])temp[k++] = arr[j++];else temp[k++] = arr[i++];}while (i <= mid)temp[k++] = arr[i++];while (j <= end)temp[k++] = arr[j++];for (int n = 0; n < k; n++)arr[start+n] = temp[n];}void merge_sort(int arr[], int start, int end, int temp[])//排序还需要知道每段排序部分的开始和结束{if (start >= end) return;//把原数组再折半分别排序int mid = (start + end)/2; merge_sort(arr, start, mid, temp);merge_sort(arr, mid+1, end, temp);merge(arr, start, mid, end, temp);}void sort(int arr[], int len){int *temp = new int[len];merge_sort(arr, 0, len-1, temp);delete[] temp;}int main(int argc, char **argv){int array[] = {9,7,5,3,4,1,0};sort(array, sizeof(array)/sizeof(*array));for (auto x : array)cout << x;return 0;}
归并排序2(C++的qsort()函数):
#include <iostream>using namespace std;//compare 函数int compare(const void *a, const void *b){int *p1 = (int *)a;int *p2 = (int *)b;return *p1 > *p2;}int main(int argc, char** argv){int array[] = {1, 8 , 3, 4, 2, 9, 6, 5, 0};//sort(array, sizeof(array)/sizeof(*array));qsort(array, sizeof(array)/sizeof(*array), sizeof(*array), compare);for (auto i : array)cout << i;return 0;}
0 0
- 基础排序算法:冒泡法,选择法,直接插入法,归并排序法
- 排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)
- javascript 冒泡排序法 插入排序法 选择排序法 归并排序法 堆排序法
- 直接插入、冒泡、快速、简单选择、堆、归并排序算法
- 直接插入、冒泡、快速、简单选择、堆、归并排序算法
- 归并排序学习总结,递归法&&插入排序&&冒泡排序&&选择排序&&快速排序
- 排序算法1.插入排序 2.冒泡排序 3.改进的冒泡法 4.归并排序
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 排序算法,选择,插入,冒泡,希尔,归并
- Java排序|冒泡法排序|插入排序|选择排序
- 排序:插入排序/选择排序/交换排序(冒泡法)
- php排序法--冒泡排序,选择排序,插入排序
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
- 八种排序算法(直接插入,希尔,直接选择,堆,冒泡,快排,归并,基数)
- 简单的排序算法(插入排序法、冒泡排序法、选择排序法)
- 6-1-2 字符类型-逃逸字符?-\b-\t-\n-\r
- C++ 超短字符串比较
- mysql 自连接
- hiho一下 第三十周 小Hi小Ho的惊天大作战:扫雷·一
- vim配置
- 基础排序算法:冒泡法,选择法,直接插入法,归并排序法
- Android基础类之BaseAdapter
- 2015重磅炸弹——【视频】Android设计招式之美
- RedHat Linux 网络配置文件详解
- POJ 1836 Alignment 枚举中间点双向求LIS
- 打印任意一年的日历
- 自定义TintSpinner的样式
- 移动开发之总结CSS3属性
- K好数