插入排序

Java实现八大排序算法

 ̄綄美尐妖づ 提交于 2019-12-26 16:55:53
Java实现八大排序算法 本文对常见的排序算法进行了总结(参考https://www.cnblogs.com/morethink/p/8419151.html)。 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪内部排序⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪插入排序{直接插入排序希尔排序选择排序{简单选择排序堆排序交换排序{冒泡排序快速排序归并排序基数排序外部排序 {内部排序外部排序 稳定与非稳定: 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的。反之,则是 非稳定 的。 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。 算法描述 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3

java算法-插入排序

假装没事ソ 提交于 2019-12-26 11:54:13
扑克牌,相信很多人都玩过,我们抓牌的时候,一般都是把抓上来的牌跟手上的牌比较,然后插到左边或者右边( 看你是从大到小,还是从小到大 )。 这就是插入排序。 package com.ghostwu; import java.util.Random; class MyInsertSort{ int maxSize; int[] arr; public MyInsertSort( int s ){ arr = new int[s]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ //从下标1开始,下标为0就一个数,他就是有序的 for( int i = 1; i < arr.length; i++ ){ int tmp = arr[i]; int j = i; //从已经排好序的数 最右边的开始比较,如果小,就把当前的值,继续和他前面的比较 while( j > 0 && tmp < arr[j-1] ) { arr[j] = arr[j-1]; //往后移动 j--; } //开始插入 arr[j] = tmp; System.out.println( "第" + i + "轮,排序结果" )

排序算法——插入排序

风格不统一 提交于 2019-12-26 11:53:59
好久没有写文章了,前一阵子身体不适。从今天开始,想把各种排序算法总结一下,基础才是最终要的,况且现在各种面试都会考到排序知识,希望我的文章能给大家带来一些帮助。 这个排序系列没有主要次要之分,也不按难易顺序,完全随机。今天先说说插入排序。 思想 插入排序的思想有点像打扑克抓牌的时候,我们插入扑克牌的做法。想象一下,抓牌时,我们都是把抓到的牌按顺序放在手中。因此 每抓一张新牌,我们都将其插入到已有的排好序的手牌当中 ,注意体会刚才的那句话。也就是说,插入排序的思想是,将新来的元素按顺序放入一个已有的有序序列当中。 举个例子可能更容易理解一些,假设有这样一系列数字:   8 2 4 9 3 6 首先我们考虑数字2,假设后面的数字不存在(手中只有一张8,又抓来了2),那么显然2应该放在8的前面。   2 8 4 9 3 6 又抓来了一张4,现在大家都知道应该怎么办了吧?   2 4 8 9 3 6 又来了个9,没错,正好不用换顺序   2 4 8 9 3 6 同样的道理,考虑3该放的位置,显然放在2和4的中间   2 3 4 8 9 6 最后一个也是一样,最后得到从小到大的序列   2 3 4 6 8 9 完成排序 怎么样,这下全明白了吧,其实很简单。 代码 printline("before sort:", v); for (int i=1; i<v.size(); i++){ int

Java排序算法——插入排序

一笑奈何 提交于 2019-12-26 11:53:38
import java.util.Arrays; //================================================= // File Name : Select_Sort //------------------------------------------------------------------------------ // Author : Common //类名:Arrays_Select //属性: //方法: class Arrays_Insert{ private int[] arrays; private int curNum; public Arrays_Insert(int max) { //建立一个max长度的空数组 super(); arrays = new int[max]; curNum = 0; } public void insert(int value){ //往空的数组里面增加元素 arrays[curNum] = value; curNum++; } public void display(){ //显示数组 System.out.println(Arrays.toString(arrays)); } private void swap(int one,int two){ //交换 int temp

java排序算法-插入排序

回眸只為那壹抹淺笑 提交于 2019-12-26 11:53:13
public class InsertSortUtils { public static void main(String[] args) { insertSortTest(); shellSortTest(); } private static void insertSortTest() { int[] values = { 5, 2, 4, 1, 3 }; System.out.print("直接插入排序前: "); Utils.printArray(values); insertSort(values); System.out.print("直接插入排序后: "); Utils.printArray(values); } private static void shellSortTest() { int[] sortArray = { 5, 2, 4, 1, 3 }; System.out.print("希尔排序前: "); Utils.printArray(sortArray); shellSort(sortArray); System.out.print("希尔排序后: "); Utils.printArray(sortArray); } public static void insertSort(int[] arr) { int temp; int j = 0; for

java插入排序

旧时模样 提交于 2019-12-26 11:52:58
public class InsertSort { private List<Integer> arr; public List<Integer> getArr() { return arr; } public InsertSort(int size, int valueRange) { arr = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < size; i++) { arr.add(Math.abs(random.nextInt()) % valueRange + 1); } } public void insertSort(){ for (int i = 1; i < arr.size(); i++) { Integer temp = arr.get(i); if (temp < arr.get(i - 1)) { arr.remove(i); for(int j=0;j<i;j++) { if (arr.get(j) >= temp) { arr.add(j, temp); break; } } } } } public static void main(String[] args) { InsertSort insertSort = new InsertSort(10,100);

插入排序

对着背影说爱祢 提交于 2019-12-26 03:33:40
所谓的插入排序 , 就是将一个数目插入到该占据的位置 。就好比打扑克牌,左手拿张牌,右手每抽一张牌,将抽到的牌插入到做左手的牌中。 基本思想 :输入一个元素,插入到一个已经排好序的数列中的适当位置,使数列依然有序。 那么显然就会有两种办法去执行此操作 :     第一种 是去建立一个新的数组,一个元素一个元素往里面放,用新插入的元素从左到右依次比较寻找插入位置 ,当找到插入位置时将该位置及其后面的元素向后移一个单位 。   ( 一个小例子 , 5 个数 1 , 4 , 2 , 5 , 3 , 运用此方法 ,首先将 1 放入一个新的数组 ,然后是 4 ,比 1 大 , 直接放在 1 后面 , 然后是 2 , 从左到右依次比较 , 找是否有比2大的数 ,此时会找到4 , 那么4 的位置即为要插入的位置 ,并且将4及其4后面的所有元素向后移一个单位 )   ( 两个关键点 ,一是寻找插入位置 , 二是将插入位置及其插入位置以后的元素向后移一个单位 )   代码示例:    void sort_cp ( ) { int i , j , t ; // t 用来记录插入位置 int a[5] = { 1 , 5 , 2 , 4 , 3 } , b[5] ; // b[5] 用来存放排好序的数组 for ( i = 0 ; i < 5 ; i++ ) { t = i ; //

插入排序_C++实现

怎甘沉沦 提交于 2019-12-25 19:21:50
# include <iostream> using namespace std ; //插入排序函数 int * insert_Sort ( int A [ ] , int num ) ; //重载输出函数,使得 “<<” 能够输出数组 ostream & operator << ( ostream & os , int * A ) ; int main ( ) { int arrays [ 11 ] = { 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 } ; //声明数组 insert_Sort ( arrays , 11 ) ; //插入排序函数 cout << arrays ; //输出数组 cout << endl ; return 0 ; } int * insert_Sort ( int * A , int num ) { for ( int i = 1 ; i < num ; i ++ ) { //遍历数组 int key = A [ i ] ; //取出第i个元素作为目标排序元素 int j = i - 1 ; //当前元素的前一个 while ( j >= 0 && A [ j ] > key ) { //开始遍历目标排序元素之前的所有元素 A [ j + 1 ] = A [ j ] ; /

常用排序算法(插入排序,快速排序,归并排序,堆排序)

↘锁芯ラ 提交于 2019-12-25 05:10:57
选择排序和冒泡排序 冒泡排序和选择排序的原理和实现比较类似,冒泡排序是按次序将序列中相邻的元素比较,符合条件时交换两者的位置,最后在序列的末尾有一个最大值,除去末尾的数组成新的序列,重复前面的步骤。选择排序是将序列中每个元素和暂存元素进行比较,符合条件时将临时变量和序列中元素交换,最后将最优值(最大或最小)的元素循环地取出。 插入排序 插入排序的概念,就像平时玩扑克一样,将后面来的数插入到前面序列中,在后面的一张插入的时候,前面的序列已经是有序的了。 public class InsertSort { public static void insertSort(int[] a){ int i, j; int n =a.length; int target; for (i = 1; i < n; i++) { j = i; target = a[i]; while (j > 0 && target < a[j-1]) { a[j] = a[j-1]; j--; } a[j] = target; } } public static void main(String[] args){ int[] a={1,5,9,4,10,8,7}; insertSort(a); for(int i= 0;i<a.length;i++){ System.out.print(a[i]+","); } }

插入排序算法

陌路散爱 提交于 2019-12-23 22:40:01
大致意思就是挨着挨着取一个元素,插入到已经部分排序好的序列中,如果小于序列中的元素,就将整个序列往后移,直到大于某个值或者数组首位就放过去这个元素。 代码实现如下: 1 #include <stdio.h> 2 int a[5]={432,43,4,2,10}; 3 void InsertSort(int a[],int n) 4 { 5 int i,j,tmp; 6 for(i=1;i<n;i++){ 7 if(a[i]<a[i-1]){ 8 tmp=a[i]; 9 for(j=i;tmp<a[j-1];--j) a[j]=a[j-1]; 10 a[j]=tmp; 11 } 12 } 13 } 14 int main() 15 { 16 InsertSort(a,5); 17 for(int i=0;i<5;i++) printf("%d\n",a[i]); 18 return 0; 19 } 测试结果如下: 来源: https://www.cnblogs.com/shixinzei/p/10995117.html