
经典排序算法
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问...
吃数据的猴子
程序人生
展开
-
基数排序
int getkey(T value, int k){ int key; while(k >= 0) { key = value % 10; value /= 10; k--; } return key;}void Distribute(SqList &L, int n, List (<)[10], int k){ for(int i=0; i<10; ++i) { clear(<[i]); } int key; fo原创 2021-01-13 21:50:43 · 104 阅读 · 0 评论 -
归并排序
void Merge(SqList &L, SqList &TP, int left, int mid, int right){ for(int i=left; i<=right; ++i) { TP[i] = L[i]; } int s1 = left; int s2 = mid+1; int k = left; while(s1<=mid && s2<=right) { if(TP[s1] <= TP[s2]) {原创 2021-01-13 21:49:37 · 102 阅读 · 0 评论 -
选择排序
选择排序1.两两比较从序列中最大的元素,然后与最末尾的元素交换位置,执行完一轮后最末尾的元素就是最大的数。2.第二轮时,忽略第一轮中找到的放在最后的最大的数,重复1的操作,找到最大的数与末尾的数交换。static void Selectsort(Integer[] array) { for(int end=array.length-1;end>0;end--) { int Indexmax=0; for(int begin=1;begin<=end;begin++) {原创 2021-01-13 21:44:17 · 95 阅读 · 0 评论 -
交换排序
冒泡排序https://blog.youkuaiyun.com/m0_43450897/article/details/106576710快速排序快速排序是对冒泡排序的一种改进。首先设定一个分界值,通过该分界值将数组分成左右两部分。右边是大于或等于分界值的数据,左边是小于分界值的数据。然后,对左边和右边的数据进行独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据又分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。重复上述过程,这样通过递归将左侧部分排好序后,再递归排原创 2021-01-13 20:50:05 · 87 阅读 · 0 评论 -
插入排序的种类及实现
直接插入排序直接插入排序的思想是:把数组的第一位L[0](也就是新插入元素赋值得到)当做哨兵,当新插入元素小于它的前一位元素时,用作新插入元素与前面其他已经排好序的元素之间做比较;当新插入元素大于它的前一位元素,不做比较。如何进行比较并移动位置呢?让L[0]依次与新插入元素的前一位元素 (L[j]) 进行比较,L[0]<L[j],说明新插入元素要放到L[j]的前面,这时要让L[j]依次赋值给他的后一位L[j+1],从而找到新插入元素在数组中的位置。最后让L[0]赋值到那个位置即可。void原创 2021-01-13 20:13:03 · 163 阅读 · 0 评论 -
排序算法的时间、空间复杂度及稳定性
排序算法的稳定性如果相等的两个元素,在排序前后的相对位置保持不变,那么就是稳定的排序算法。对数组进行排序时可能没什么影响,对当对自定义对象进行排序时,可能会出错。原创 2021-01-07 18:49:05 · 110 阅读 · 0 评论 -
交换排序之冒泡排序代码实现及优化
冒泡排序意思:像气泡一样,从水底到水面,逐渐变大。每一次两两交换(如第一个数和第二个数,第二个数和第三个数……),若前面的数比后面的数大就交换顺序,一次排序总能找到一个最大的数。(设为内循环)再次进行一次排序,这一次最后一个数已经是这组数中的最大数了,不参与排序。如果有n个数,第一次就需要比较n-1次,第二次就需要比n-2次。(外循环)public class Main { public static void main(String[] args) { int[] array= {1,2,.原创 2020-08-29 22:14:27 · 269 阅读 · 0 评论