1. 程式人生 > >資料結構——直接插入排序(c++)

資料結構——直接插入排序(c++)

ImprovedInsertSorter.h

//ImprovedInsertSorter.h
//優化的插入排序類
#if !defined(AFX_ImprovedInsertSorter)
#define AFX_ImprovedInsertSorter


#include "Sorter.h"
template <class Record>
class ImprovedInsertSorter:public Sorter<Record>
{
public:
    void Sort(Record Array[],int n);
};

//優化的插入排序,Array[]為待排序陣列,n為陣列長度
template <class Record> void ImprovedInsertSorter<Record>::Sort(Record Array[], int n) { Record TempRecord; int i,j; for(i=1;i<n;i++) { TempRecord=Array[i]; j=i-1; while(j>=0 && TempRecord<Array[j]) { Array[j+1
]=Array[j]; j=j-1; } Array[j+1]=TempRecord; } } #endif

Sorter.h

//Sorter.h
#if !defined(AFX_Sorter)
#define AFX_Sorter

//總排序類
template <class Record>
class Sorter{
protected:
    static void swap(Record Array[],int i,int j);   //交換陣列中的兩個記錄
public:
    virtual void
Sort(Record Array[],int n)=0; //對陣列Array進行排序 void PrintArray(Record array[], int n); //輸出陣列內容 }; //交換陣列中的兩個記錄 template <class Record> void Sorter<Record>::swap(Record Array[],int i,int j) { Record TempRecord = Array[i]; Array[i] = Array[j]; Array[j] = TempRecord; } //輸出陣列內容 template <class Record> void Sorter<Record>::PrintArray(Record Array[], int n) { for(int i=0;i<n;i++) cout<<Array[i]<<" "; cout<<endl; } #endif

ImprovedInsertSort.cpp

//ImprovedInsertSort.cpp
//優化的直接插入排序

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "ImprovedInsertSorter.h"
const int N=1000;
// 設定隨即函式的種子
inline void Randomize() 
  { srand(1); }

//返回一個0到n-1之間的隨機數
inline int Random(int n)
  { return rand() % (n); }


void main()
{
    ImprovedInsertSorter<int> c;
    srand(1);
    int Array[8];
    for(int i=0;i<8;i++)
    {
        Array[i]=Random(100);
    }
    c.Sort(Array,8);
    c.PrintArray(Array,8);
}

這裡寫圖片描述

相關推薦

資料結構——直接插入排序c++

ImprovedInsertSorter.h //ImprovedInsertSorter.h //優化的插入排序類 #if !defined(AFX_ImprovedInsertSorter) #d

八大排序演算法之一直接插入排序C語言

概述 排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裡說說八大排序就是內部排序。     當n較大,則應採用時間複雜度為O(nlog2n)的排序方法:快

直接插入排序c語言實現

#include <stdio.h> #define T 1 #define F 0 #define MAXSIZE 10 //要排序陣列個數的最大值 typedef struct {

資料結構 簡單選擇排序C語言實現

       選擇排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。 演算法思想       第一趟簡單選擇排序時,從第一個記錄開始,通過n-1 次關鍵字比較,從n 個記錄中選出關鍵字最小的記錄,並和第

InsertionSort 直接插入排序java

string static 數字 nbsp ava 思想 oid sta and 排序思想: 相當於一堆數字,一開始先取出2個數排序,2個數排好序之後,再從一堆數字裏面取一個數排序,直到結束偽代碼: INSERTION_SORT(A) for j = 2 to A.leng

插入排序C#

                // --------------------------------------------------------------------------------------------------------------------// <copyright fil

資料結構——動態連結串列C++

定義一個節點: [cpp] view plain copy  print? #include <iostream> usingnamespace std;   typedefint T;   struct Node{       T dat

資料結構之氣泡排序java

氣泡排序可以說是最簡單的排序演算法,但不意味著它不重要。 理解氣泡排序,可以帶出以下問題。 1.氣泡排序只有一個基本操作,就是比較和交換相鄰的兩個元素,可以提現將一個複雜問題轉化為簡單問題的疊加的思想。 2.氣泡排序的兩層for迴圈該如何理解。 3.分析時間複雜度簡單,程式

[資料結構]直接插入排序

插入排序的思想   插入排序是一種簡單隻管的排序方法,其基本思想在於每一次待排序的記錄,按其關鍵字大小插入到前面已經排好序的子序列中,直到全部記錄插入完成。   假設在排序過程中,待排序表L[1….

資料結構--二叉樹C++

零、二叉樹解決的問題 通過學習陣列和連結串列,前者可以在常數時間內找到目標物件,但是插入和刪除操作,都需要耗費線性的時間。後者則可以在常數時間內進行插入和刪除,但是查詢某一元素,則需要線性時間。很顯然各有利弊,所以我們能不能選用一種更好的結構呢?樹結構則是很好

資料結構排序的實驗四快速,冒泡,簡單選擇,直接插入排序c語言實現!!

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18p

資料結構與演算法C++之插入排序

上一篇資料結構與演算法C++之插入排序中使用C++實現了插入排序演算法,但是使用了交換操作(swap),一次swap操作包括三次移位操作,造成執行時間比較長,本篇部落格對其改進。 (1)首先,考慮第一個元素8,此時只有一個元素,是排好序的 (2)然後考慮第二個元素6 (3)將元素6拷

直接插入排序高級版C++實現

include ostream 源代碼 cpp -s 臨時 ios 結束 中間變量 直接插入排序(高級版)之C++實現 一、源代碼:InsertSortHigh.cpp 1 /*直接插入排序思想: 2  假設待排序的記錄存放在數組R[1..n]中。初始時,R[1]自成

直接插入排序Straight Insertion Sort

temp wap 序表 maxsize 得到 進行 efi size 長度 直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增1的有序表。 /* 對順序表L作直接插入排序 */ v

資料結構——稀疏矩陣運算器C語言

資料結構——稀疏矩陣運算器(C語言) /*****************稀疏矩陣運算器 ****************/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define TRUE

演算法實現:插入排序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

資料結構——順序表操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

資料結構-簡單選擇排序含全部程式碼

   函式分析如下: SelectSort(SqList &L) 引數:順序表L 功能:排序(預設升序)空間複雜度:O(1) 時間複雜度:O(n方)                           穩定性:不穩定 思想:假設第i個值為當前最小值(0到i-1已經為

直接插入排序Straight Insertion Sort- java實現

學習自嚴蔚敏、吳偉民的《資料結構》-清華大學出版 最簡單的排序方法。基本操作是將一個記錄插入到已排序好的有序表中,從而得到一個新的、記錄數增1的有序表。 先看程式碼: public static int[] insertSort(int[] arr) { for

資料結構與演算法--排序冒泡、選擇、歸併、快速排序、堆排序

/** * 氣泡排序 * @param arr */ function bubbleSort(arr) { let len = arr.length; for (let i =0; i < arr.len; i++) { for (l