1. 程式人生 > >《github一天一道演算法題》:插入排序

《github一天一道演算法題》:插入排序

看書、思考、寫程式碼!

/***********************************************
* [email protected]
* blog: http://blog.csdn.net/hustyangju
* 2014-11-03
* 題目: 插入排序
* 描述: 給定一個數組,按照逐個插入比較的方法得到一個已序陣列
* 解題思路:從第一個元素開始,在已序陣列上插入下一個元素,可以從已序陣列的尾部,也可以從頭部逐個比較插入
* 時間複雜度:原陣列順序排好的情況下,時間複雜度最好,為O(n);原陣列逆序排好時,時間複雜度最壞,為O(n^2),平均時間複雜度為O(n^2)
* 空間複雜度:只用到一個臨時變數,在原陣列上排序,空間複雜度為O(1)
************************************************/
#include <iostream>

using namespace std;
template<class type>
class insert_sort
{
public:
    insert_sort(type *p,int num):_p(p),_num(num){}
    ~insert_sort();
    void sort();
    void print();
private:
    type *_p;
    int _num;
};
template<class type>
insert_sort<type>::~insert_sort()
{

}
template<class type>
void insert_sort<type>::sort()
{
    for(int i=1;i<_num;i++)
    {
        int j=i-1;
        type key=_p[i];
        while((j>=0)&&(_p[j]>key))
        {
            _p[j+1]=_p[j];
            j-=1;
        }
        _p[j+1]=key;
    }
}

template<class type>
void insert_sort<type>::print()
{
    for(int i=0;i<_num;i++)
    {
        cout<<*_p<<" ";
        _p++;
    }
     cout<<endl;
}

int main()
{
    float array[5]={5.1,3,6.8,9.1,10};
    int array1[10]={22,8,9,42,2,78,9,33,11,10};
    insert_sort<float> mysort(array,5);
    mysort.sort();
    mysort.print();
    insert_sort<int> mysort1(array1,10);
    mysort1.sort();
    mysort1.print();
    //system("PAUSE");
}


相關推薦

github一道演算法插入排序

看書、思考、寫程式碼! /*********************************************** * [email protected] * blog: http://blog.csdn.net/hustyangju * 2014-11-0

從尾到頭列印連結串列——【一道演算法

輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。 思想:棧的思想 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x #

一道演算法(持續更新)

day1 Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each inp

一道演算法——數對數目分析

 題目:     給定2個數組X和Y,元素都是正數,請找出滿足如下條件的數對的個數:   1.x^y > y^x,即x的y次方大於y的x次方   2.x來自X陣列,y來自Y陣列分析:你真的想要暴力嗎,如果兩個陣列的長度為m和n,那麼暴力的複雜度整整有O(m*n)那麼高,而且沒有用到正數這個條件我們來變形

每日一道演算法求數列的和

題目描述 數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。 輸入描述: 輸入資料有多組,每組佔一行,由兩個整數n(n < 10000)和m(m < 1000)組成,n和m的含義如前所述。 輸出描述: 對於每組輸入資料,輸出該數列的和,每個測

一道演算法12個黑球和1個白球圍成一個圓

問題: 桌上有12個黑球和1個白球圍成一個圓,按順時針方向順序數到13就拿走對應的一個球, 如果要求最後拿走的是白球,請問該從哪個球開始數數。 分析: 從最後一輪開始考慮,按輪次倒推。可以用遞迴法

演算法實現插入排序(C/C++、Python)

虛擬碼: INSERTION-SORT for j <- 2 to length[A] key <- A[j] Insert A[j]into the sorted sequence A[l...j-1]. i <- j - 1 wh

排序演算法02 插入排序

插入排序是這樣一種排序: 為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入之前都向右移動一位。 與選擇排序一樣,當前索引左邊的元素是有序的,但它們的最終位置還不確定。 插入排序所需的時間取決於輸入中元素的初始順序,在實際應用中對某些型別的非隨機陣列很有效

java演算法排序陣列中刪除重複項

題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2

一道能做出來就腳踢BAT的高難度演算法在元素重複三次的陣列中查詢重複次的元素

我們看一道難度很高的查詢類演算法題,如果你真能在一小時內給出正確的演算法和編碼,那麼你隨便在BAT開口年薪一百萬都不算過分。我們先看題目:給定一個數組,它裡面除了一個元素外,其他元素都重複了三次,要求在空間複雜度為O(1),時間複雜度為O(n)的約束下,查詢到只重複了一次的元素。 在

一道簡單的演算法不借助第三變數來交換兩個變數的值

今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決

演算法假設列火車一共經過10個車站,車站按順序為 A B C D E F G H I J ,編寫一個程式,自動計算剩餘的票

假設一列火車一共經過10個車站,車站按順序為 A B C D E F G H I J ,編寫一個程式,自動計算剩餘的票     要求:1 假設火車有100個座位        2.程式可以輸入購買車票的起始站與結束站        3.輸入後,程式輸出剩餘車票,       

一道LeetCode】#100. Same Tree(100大關)

一天一道LeetCode 本系列文章已全部上傳至我的github,地址:ZeeCoder‘s Github 歡迎大家關注我的新浪微博,我的新浪微博 歡迎轉載,轉載請註明出處

java演算法只出現次的數字

題目: 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,1] 輸出: 1 示例 2: 輸入: [4,1,2,1

每日一道演算法4——在二元樹中找出和為某值的所有路徑

題目:輸入一個整數和一棵二元樹。從樹的根節點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。打印出和與輸入整數相等的所有路徑。 例如輸入整數22和如下二元樹 則打印出兩條路徑:10,12和10,5,7 參考程式碼: #include <i

每天一道演算法(二)給定陣列Arr和一個整數aim,請返回哪兩個位置的數可以加出aim來。

給定陣列Arr和一個整數aim,請返回哪兩個位置的數可以加出aim來 例如:arr={2,7,11,15},target = 9 返回{0,1},因為arr[0] + arr[1] = 2 + 7 = 9,可以假設每個數組裡只有一組答案。 大概流程是這樣的: 首先,定義一個

排序演算法插入排序與堆排序

排序演算法是演算法研究中最基礎的問題,本文針對排序演算法,介紹幾種排序演算法的基本方法、時間複雜度及Java實現等內容。 原址性 :如果輸入陣列中僅有常數個元素需要在排序的過程中儲存在陣列之外,那麼排序演算法就是原址的。         常用排序演算法的執行

rhcsa考證試題分析(更新五

linux 運維 rhsca rhsca考試時間:2.5小時 滿分300分210分及格當時我考的是300分(雖然很簡單但是我還是高興)第一題破解redhat7 密碼按e輸入 rd.break再接著 ctrl + xmount -o remount,rw /sysrootchroot /sysro

算法學習筆記(插入排序和線性查找

插入排序 算法學習 AS 獲取 ear array import 右移 創建 (一)插入排序 看下面這張圖片:把打牌時手上的牌抽象為一個列表A,j表示當前最新抓的牌的索引(先放到手上最右邊) 索引 j =0 時 A[j] = 3 j >= 1時, 1、我們拿到

演算法1的數目

給定一個十進位制正整數N,寫下從1開始,到N的所有正整數,然後數一下其中出現的所有“1”的個數。例如:N =12,我們會寫下1,2,3,4,5,6,7,8,9,10,11,12。這樣1出現的個數為5 java程式碼實現 public class demo1 { public st