1. 程式人生 > >地精排序Gnome Sort ----(排序演算法十)

地精排序Gnome Sort ----(排序演算法十)

1.演算法原理 

2.演算法程式碼

#include <stdio.h>

//printArray打印出陣列
void printArray(int a[],int size){  
    printf("陣列為:[%d] ",a[0]);  
    for (int i=1;i<size;i++)  
    {  
        printf(" %x ",a[i]);  
    }  
    printf("\n");  
}


void main()
{
	//a[0]監視哨
	int  a[10] ={0,9,8,7,6,5,4,3,2,1};
	int  len=10;
	int i = 1;
	while (i < len) {
		if (i == 1 || a[i-1] <= a[i]){
			i++;
		}else{
			printf("%d<-->%d ",a[i-1],a[i]);
			printArray(a,10);
			a[0] = a[i]; 
			a[i] = a[i-1]; 
			a[--i] = a[0];
		}	
	}
	printArray(a,10);
}



3.結果

9<-->8 陣列為:[0]  9  8  7  6  5  4  3  2  1
9<-->7 陣列為:[8]  8  9  7  6  5  4  3  2  1
8<-->7 陣列為:[7]  8  7  9  6  5  4  3  2  1
9<-->6 陣列為:[7]  7  8  9  6  5  4  3  2  1
8<-->6 陣列為:[6]  7  8  6  9  5  4  3  2  1
7<-->6 陣列為:[6]  7  6  8  9  5  4  3  2  1
9<-->5 陣列為:[6]  6  7  8  9  5  4  3  2  1
8<-->5 陣列為:[5]  6  7  8  5  9  4  3  2  1
7<-->5 陣列為:[5]  6  7  5  8  9  4  3  2  1
6<-->5 陣列為:[5]  6  5  7  8  9  4  3  2  1
9<-->4 陣列為:[5]  5  6  7  8  9  4  3  2  1
8<-->4 陣列為:[4]  5  6  7  8  4  9  3  2  1
7<-->4 陣列為:[4]  5  6  7  4  8  9  3  2  1
6<-->4 陣列為:[4]  5  6  4  7  8  9  3  2  1
5<-->4 陣列為:[4]  5  4  6  7  8  9  3  2  1
9<-->3 陣列為:[4]  4  5  6  7  8  9  3  2  1
8<-->3 陣列為:[3]  4  5  6  7  8  3  9  2  1
7<-->3 陣列為:[3]  4  5  6  7  3  8  9  2  1
6<-->3 陣列為:[3]  4  5  6  3  7  8  9  2  1
5<-->3 陣列為:[3]  4  5  3  6  7  8  9  2  1
4<-->3 陣列為:[3]  4  3  5  6  7  8  9  2  1
9<-->2 陣列為:[3]  3  4  5  6  7  8  9  2  1
8<-->2 陣列為:[2]  3  4  5  6  7  8  2  9  1
7<-->2 陣列為:[2]  3  4  5  6  7  2  8  9  1
6<-->2 陣列為:[2]  3  4  5  6  2  7  8  9  1
5<-->2 陣列為:[2]  3  4  5  2  6  7  8  9  1
4<-->2 陣列為:[2]  3  4  2  5  6  7  8  9  1
3<-->2 陣列為:[2]  3  2  4  5  6  7  8  9  1
9<-->1 陣列為:[2]  2  3  4  5  6  7  8  9  1
8<-->1 陣列為:[1]  2  3  4  5  6  7  8  1  9
7<-->1 陣列為:[1]  2  3  4  5  6  7  1  8  9
6<-->1 陣列為:[1]  2  3  4  5  6  1  7  8  9
5<-->1 陣列為:[1]  2  3  4  5  1  6  7  8  9
4<-->1 陣列為:[1]  2  3  4  1  5  6  7  8  9
3<-->1 陣列為:[1]  2  3  1  4  5  6  7  8  9
2<-->1 陣列為:[1]  2  1  3  4  5  6  7  8  9
陣列為:[1]  1  2  3  4  5  6  7  8  9



相關推薦

排序Gnome Sort ----(排序演算法)

1.演算法原理  2.演算法程式碼 #include <stdio.h> //printArray打印出陣列 void printArray(int a[],int size){

拓撲排序|Topological Sort演算法題心得(PYTHON版)

拓撲排序 尋找專案之間依賴順序的過程稱為拓撲排序(topological sorting)。   首先要了解有向無環圖|Directed Acyclic Graph: 用字典表示:G = { 'a':'bce', 'b':'d','c':'d','d':'','e':'cd'} Key

雞尾酒排序Cocktail Sort(排序演算法九)

1.演算法原理  2.程式碼實現 #include <stdio.h> //printArray打印出陣列 void printArray(int a[],int size){

鴿巢排序Pigeonhole Sort----(排序演算法八)

1.演算法原理 鴿巢排序是對桶排序演算法的改進,只是桶中裝對應下標放元素出現的次數 待排序陣列:a[14] ={ 6, 6, 2, 2, 2, 4, 1, 1, 1, 5, 5, 5, 5, 9 };

EXCEL排序sort排序

Excel可以對一組紀錄按任意指定列排序。現請你編寫程式實現類似功能。 Input測試輸入包含若干測試用例。每個測試用例的第1行包含兩個整數 N (<=100000) 和 C,其中 N 是紀錄的條數,C 是指定排序的列號。以下有 N  行,每行包含一條學生紀錄

記錄一下氣泡排序sort()排序

今天有空,整理了一下寫過的javascript排序方法。排序方法很多,我瞭解的不算多,這裡記錄下知道的氣泡排序和js自帶的sort()排序。 1. 氣泡排序 function BubbleSort(arr) { var len = arr.length;

java實現排序演算法

前面我們詳細的講解了地精排序演算法,現在我們用java程式碼來實現一下,直接上程式碼 package ttt; public class GnomeSort { public static int[] BubbleSort(int[] theArray) {

go實現排序演算法

前面我們詳細的講解了地精排序演算法,現在我們用go語言來實現下 package main import "fmt" //地精排序 func gnomeSort(theArray []int) []int { i := 0 for i<len(theArray)

臭皮匠排序(Stooge Sort)----(排序演算法二)

1.演算法原理 2.程式碼實現 #include <stdio.h> //printArray打印出陣列 void printArray(int a[],int size){

[golang] 數據結構-排序

ffffff 最好 排序。 () col images import else 圖片 碎碎念這是一個名字起得很隨便的排序算法,是我我就叫他史萊姆排序ㄟ(▔,▔)ㄏ 原理地精排序是也是一種交換排序。它只進行一輪比較,在這輪比較中,遇到比較前面元素大就向後移動一位繼續比較,遇到

排序演算法--氣泡排序(bubble sort)

氣泡排序是一個簡單的排序演算法,演算法複雜度n的平方,特點是兩兩比較,每次遍歷會將最大值或最小值放在最後,像冒泡一樣,每次的最大值或最小值,逐漸冒出,故名氣泡排序; 程式碼如下 void swap( int& a,int& b) {//資料交換的函式,這裡另類了一點,沒有

經典排序演算法 - 氣泡排序Bubble Sort

最近學習了一下排序演算法,寫篇文章記錄一下,詳細講解網上有很多,可以自己去查 氣泡排序Bubble Sort 氣泡排序是通過兩兩比較,最大的往後移,重複這一過程直到資料不再交換,則排序完成。氣泡排序的時間複雜度是O(n²),是穩定排序。 演算法描述(Java):

經典排序演算法 - 插入排序Insert Sort

最近學習了一下排序演算法,寫篇文章記錄一下,詳細講解網上有很多,可以自己去查 插入排序Insert Sort 直接插入排序就是依次將無序表中的資料插入到有序表的適當位置,使有序表仍有序,直到全部插入為止。插入排序的時間複雜度是O(n²),是穩定排序。 [ 2

排序演算法】選擇排序(Selection sort)

  0. 說明   選擇排序(Selection sort)是一種簡單直觀的排序演算法。   它的工作原理如下。   首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完

Java基礎 String 裸暴力演算法- 五個小練習 Java陣列直接選擇排序sort()排序

  之間的部落格,承上啟下:    Java基礎 String/StringBuff 常用操作方法複習/記憶體分析 Java陣列直接選擇排序、sort()排序 Java基礎 String 演算法 - 五個練習題目要求: /** 1.模擬一個trim方法,去除

演算法》第四版algs4:sort排序演算法C++實現

具體程式碼: https://github.com/Nwpuer/algs4-in-cpp/blob/master/sort.h 這一章的實現,相比於書上我做了輕微的改變,主要目的是把程式碼寫的更加簡潔易懂,更加關注演算法是如何實現的,換言之,更關注演算法的本質,而不是如何去設計一個C+

經典排序演算法 - 堆排序Heap sort

經典排序演算法 - 堆排序Heap sort 堆排序有點小複雜,分成三塊 第一塊,什麼是堆,什麼是最大堆 第二塊,怎麼將堆調整為最大堆,這部分是重點 第三塊,堆排序介紹 第一塊,什麼是堆,什麼是最大堆 什麼是堆 這裡的堆(二叉堆),指得不是堆疊的那

排序演算法(氣泡排序,快速排序,插入排序等)

氣泡排序 <1>.比較相鄰的元素。如果第一個比第二個大,就交換它們兩個; <2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數; <3>.針對所有的元素重複以上的步驟,除了最後一個; <4>.

STL sort排序演算法詳細介紹

                C++之所以得到這麼多人的喜歡,是因為它既具有面向物件的概念,又保持了C語言高效的特點。STL 排序演算法同樣需要保持高效。因此,對於不同的需求,STL提供的不同的函式,不同的函式,實現的演算法又不盡相同。1.1 所有sort演算法介紹所有的sort演算法的引數都需要輸入一個範

常用演算法——希爾排序(Shell Sort)

1.什麼是希爾排序 希爾排序的核心思想是使陣列中任意間隔為g的元素都是有序的。首先取小於陣列長度的一個數g1作為第一個間隔值,對全部陣列進行兩兩分組,在分組內實現排序。然後取g2(g2小於g1,g1到g2應有一個明確的增量演算法)再對陣列進行兩兩分組,再實現組