1. 程式人生 > >6.2筆記

6.2筆記

升序 調整 數量 簡單選擇 錯誤 相同 七星 位數 無序

一、水仙花數

水仙花數是指一個 n 位數 ( n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身。(例如:1^3 + 5^3+ 3^3 = 153)

水仙花數只是自冪數的一種,嚴格來說三位數的3次冪數才成為水仙花數。

附:其他位數的自冪數名字

一位自冪數:獨身數

兩位自冪數:沒有

三位自冪數:水仙花數

四位自冪數:四葉玫瑰數

五位自冪數:五角星數

六位自冪數:六合數

七位自冪數:北鬥七星數

八位自冪數:八仙數

九位自冪數:九九重陽數

十位自冪數:十全十美數

二、排序

排序是計算機內經常進行的一種操作,其目的是將一組"無序"的記錄序列調整為"有序"的記錄序列。分內部排序和外部排序。若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。反之,若參加排序的記錄數量很大,整個序列的排序過程不可能在內存中完成,則稱此類排序問題為外部排序。內部排序的過程是一個逐步擴大記錄的有序序列長度的過程。

概念描述

將雜亂無章的數據元素,通過一定的方法按關鍵字順序排列的過程叫做排序。假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序算法是穩定的;否則稱為不穩定的。

常見排序算法

快速排序、希爾排序、堆排序、直接選擇排序不是穩定的排序算法,而基數排序、冒泡排序、直接插入排序、折半插入排序、歸並排序是穩定的排序算法

概述

內排序的方法有許多種,按所用策略不同,可歸納為五類:插入排序、選擇

排序、交換排序、歸並排序和分配排序。

其中,插入排序主要包括直接插入排序和希爾排序兩種;選擇排序主要包括直接選擇排序和堆排序;交換排序主要包括氣(冒)泡排序和快速排序。

分類

穩定排序:假設在待排序的文件中,存在兩個或兩個以上的記錄具有相同的關鍵字,在

用某種排序法排序後,若這些相同關鍵字的元素的相對次序仍然不變,則這種排序方法

是穩定的。其中冒泡,插入,基數,歸並屬於穩定排序,選擇,快速,希爾,堆屬於不穩定排序。

就地排序:若排序算法所需的輔助空間並不依賴於問題的規模n,即輔助空間為O(1),

則稱為就地排序

三、冒泡排序

冒泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名。

已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],以此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組數據中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以升序排列了。降序排列與升序排列相類似,若a[1]小於a[2]則交換兩者的值,否則不變,後面以此類推。 總的來講,每一輪排序後最大(或最小)的數將移動到數據序列的最後,理論上總共要進行n(n-1)/2次交換。

優點:穩定;

缺點:慢,每次只能移動相鄰兩個數據。

四、選這排序

選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的算法主要有簡單選擇排序、樹型選擇排序和堆排序。

簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。

6.2筆記