1. 程式人生 > >氣泡排序(c語言實現)

氣泡排序(c語言實現)

#include <stdio.h>

#define T 1
#define F 0
#define MAXSIZE 10		//要排序陣列個數的最大值

typedef struct
{
	int r[MAXSIZE + 1];	//儲存要排序陣列,r[0]用作哨兵或臨時變數
	int length;
}SqList;

void swap(SqList *L, int i, int j)
{
	int temp = L->r[i];
	L->r[i] = L->r[j];
	L->r[j] = temp;
}

void bubbleSort(SqList *L)
{
	int i, j;
	int flag;
	for (i = 1; i < L->length && flag; i++)
	{
		flag = 0;
		for (j = L->length; j > i; j--)		//冒泡一定是從後往前比較
		{
			if (L->r[j] < L->r[j-1])
			{
				swap(L, j, j-1);
				flag = 1;						//如果沒有交換說明已經排好序了
			}		
		}
	}
}

int main()
{
	int i;
	SqList L;
	L.length = 10;
	for (i = 1; i < L.length+1; i++)
	{
		L.r[i] = i;
	}
	L.r[5] = 100;
	L.r[7] = 90;
	for (i = 1; i < L.length+1; i++)
	{
		printf("%d ", L.r[i]);
	}
	//printf("\n");							//在這裡加上一句printf 最後列印的就是未排序之前的陣列 ??? 求解				
	bubbleSort(&L);
	printf("\n");
	for (i = 1; i < L.length+1; i++)
	{
		printf("%d ", L.r[i]);
	}
	printf("\n");
	return 0;
}

執行結果:


去掉printf註釋後的執行結果:


???? 為什麼呢,在普通的c語言編輯器是好的,用的是ubutun出現了上術問題,還望大佬解答。

另一種簡單表示:

#include <stdio.h>

void swap(int *i, int *j)
{
	int temp = *i;
	*i = *j;
	*j = temp;
}

int main()
{
	int a[10] = {2,1,4,5,6,9,7,8,7,7};
	int i,j;
	for (i = 0; i < 10; i++)
	{
		for (j = 9; j > i; j--)//從後往前冒泡
		{
			if (a[j] < a[j-1])
			{
				swap(&a[j], &a[j-1]);
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", a[i]);
	}
	return 0;
}

執行結果:


相關推薦

氣泡排序c語言實現

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

排序C語言實現

names 博客 鏈接 c語言實現 建立 ron 要求 clas [1] 之前的博客介紹介紹了數組的兩種排序算法:插入排序和歸並排序(採用遞歸),見鏈接http://blog.csdn.net/u013165521/article/detai

歸並排序C語言實現

ngs 基本 merge 兩個 它的 efi 分別是 void rec 合並排序(MERGE SORT)是又一類不同的排序方法,合並的含義就是將兩個或兩個以上的有序數據序列合並成一個新的有序數據序列,因此它又叫歸並算法。 它的基本思想就是假

排序C語言實現

內部排序 利用 int 分治 arr 個數 size quic 外部排序 讀數據結構與算法分析 插入排序 核心:利用的是從位置0到位置P都是已排序的 所以從位置1開始排序,如果當前位置不對,則和前面元素反復交換重新排序 實現 void InsertionSort

有趣的演算法:3分鐘看懂希爾排序C語言實現

在上一次的演算法討論中,我們一起學習了直接插入排序。它的原理就是把前i個長度的序列變成有序序列,然後迴圈迭代,直至整個序列都變為有序的。但是說來說去它還是一個時間複雜度為(n^2)的演算法,難道就不能再進一步把時間複雜度降低一階麼?確實,以上幾種演算法相對於之前的O(n^2)

資料結構排序演算法之歸併排序c語言實現

博主身為大二萌新,第一次學習資料結構,自學到排序的時候,對於書上各種各樣的排序演算法頓覺眼花繚亂,便花了很長的時間盡力把每一個演算法都看懂,但限於水平有限,可能還是理解較淺,於是便將它們逐個地整理實現出來,以便加深理解。 歸併排序就是通過將一個具有n個key記錄的線性表,看

排序演算法-合併排序C語言實現

都說“演算法是程式的靈魂”,而排序是計算機儲存控制方面不能沒有的操作。它在資料的存取,查詢搜尋,資料統計這些基礎資料操作方面有著重要的應用。所以排序演算法是必須是很有研究的。 這次,我學習的是-歸併排序演算法。據說該演算法是馮諾依曼發明的。這個排序演算法比起直

直接插入排序c語言實現

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

快速排序c語言實現

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

拓撲排序C語言實現

拓撲排序可以將一個有向無環圖轉換為一個線性序列。它也是判定一個有向圖是否是無環的方法之一。如何進行拓撲排序,方法如下: (1)從有向圖中選取一個沒有前驅(入度為0)的頂點,並輸出之; (2)從有向圖中刪去此頂點以及所有以它為尾的弧(弧頭頂點的入度減1); 重複

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

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

資料結構排序演算法之快速排序c語言實現

快排的原理就是通過一趟排序將待排記錄分割成獨立的兩部分,其中的一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。這其中,可以使用遞迴呼叫某一關鍵函式的辦法來實現這樣的功能。 分割的方法就是,選取一個樞軸,將所有關鍵字比它

隨機三位數氣泡排序C語言

前段時間學到了氣泡排序,又偶然接觸到了隨機數,就試著將他們結合了一下,程式碼如下。 #include<stdio.h> #include<stdlib.h> //包含了產生隨機數所需要的srand()函式與rand()函式 #include<tim

資料結構之二叉排序C語言實現

一、基本概念1.二叉排序樹        二叉排序樹(Binary sort tree,BST),又稱為二叉查詢樹,或者是一棵空樹;或者是具有下列性質的二叉樹:        (1)若它的左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值;        (2)若它的右

幾種常用的排序演算法c語言實現

概述 最近重新回顧了一下資料結構和演算法的一些基本知識,對幾種排序演算法有了更多的理解,也趁此機會通過部落格做一個總結。 1.選擇排序-簡單選擇排序 選擇排序是最簡單的一種基於O(n2)時間複雜度的排序演算法,基本思想是從i=0位置開始到i=n-1

直接插入排序C語言實現

插入法排序:通過資料移動,留出合適位置插入順序合適的值,而無須資料交換 步驟:從第二個元素“i”開始快取準備用於比較,並留出一個空位將空位前的元素“j”拿來與快取值比較不滿足則移動,直到向前找到頭比較的目的是要讓快取值插入後成為從開頭到插入點這個區間中的最值如果快取值向前看

計數排序演算法C語言實現

計數排序,  比較適合數值跨度比較小的,  也就是陣列中最大值減去最小值得到的值儘量小,  同時陣列元素又比較多的情況下用計數排序效率比較高,同時,計數排序演算法基友穩定性。 計數排序的時間複雜度為O(n),計數排序是用來排序0到100之間的數字的最好的演算法。 演算法的步

PAT Basic 1045. 快速排序(25)C語言實現

, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目著名的快速排序演算法裡有一個經典的劃分過程:我們通常採用某種方法取一個元素作為

[answerer的演算法課堂]簡單描述4種排序演算法C語言實現

[answerer的演算法課堂]簡單描述4種排序演算法(C語言實現) 這是我第一次寫文章,想要記錄自己的學習生活,寫得不好請包涵or指導,本來想一口氣寫好多種,後來發現,寫太多的話反而可讀性不強,而且,我文筆,知識有限吶。慢慢來吧 目錄 名稱氣泡排序直接選擇排序直接插入排序希爾排序 時間複雜度 O(