算法
JJ知识库
这个作者很懒,什么都没留下…
展开
-
算法-选择排序
基本思想: 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换; 第二次遍历n-2个数,找到最小的数值与第二个元素交换; 。。。 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 平均复杂度:O(n^2) #include <bits/stdc++.h> using namespace std; int s = 0x3f3f3f3f; int main(){ int n; scanf("%d",&n)..原创 2021-09-17 20:13:49 · 60 阅读 · 0 评论 -
算法-希尔排序
前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1; 数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3; 如果数据序列基本有序,使用插入排序会更加高效。 基本思想: 在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。 然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。..原创 2021-09-17 20:05:34 · 55 阅读 · 0 评论 -
算法-插入排序
基本思想: 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。类似于冒泡排序,冒泡排序自底向上,插入自顶向下。 平均时间复杂度:O(n2) #include <bits/stdc++.h> using namespace std; int main(){ int n; scanf("%d",&n); int a[n]; for原创 2021-09-17 20:10:30 · 46 阅读 · 0 评论 -
算法-冒泡排序
#include <bits/stdc++.h> using namespace std; int main(){ int n; scanf("%d",&n); int a[n]; for(int i = 0 ; i < n ; i++){ scanf("%d",&a[i]); } bool check = false; int item;//转换值 for(int i = 0 ; i <.原创 2021-09-17 19:51:05 · 38 阅读 · 0 评论 -
算法-快速排序
#include <bits/stdc++.h> using namespace std; void sortquick(int l,int r,int a[]){ if(l >= r){//左边下标大于或等于右边下标结束 return; } int i = l , j = r;//左右下标赋值 int key = a[l];//左边第一个值定位key值 while(i < j){ //走右边 ...原创 2021-09-17 19:47:00 · 40 阅读 · 0 评论 -
Java中反转链表
描述 输入一个链表,反转链表后,输出新链表的表头。 示例1 输入: {1,2,3} 复制返回值: {3,2,1} 核心办法:运用前插法 链表类: public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 方法一: public class Solution { public ListNode原创 2021-09-14 09:40:22 · 141 阅读 · 0 评论