1. 程式人生 > >C語言實現氣泡排序和簡單選擇排序

C語言實現氣泡排序和簡單選擇排序

氣泡排序(Bubble Sort)的基本思想為兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。

其時間複雜度為O(n^2)。

簡單選擇排序(Simple Selection Sort)的基本思想是通過n-i次關鍵字的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個記錄交換。

其時間複雜度為O(n^2),但效能上還是略優於氣泡排序。

以下程式在DEV C++中除錯執行通過。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
	int r[10];
	int lenght; 
}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=1;
	for(i=1;i<L->lenght&&flag;i++)
	{
		flag=0;
		for(j=L->lenght-1;j>=i;j--) 
		{
			if(L->r[j]>L->r[j+1])
			{
				swap(L,j,j+1);
				flag=1;
			}
		}
	}
}

void SelectSort(SqList *L)
{
	int i,j,min;
	for(i=1;i<L->lenght;i++)
	{
		min=i;
		for(j=i+1;j<L->lenght;j++)
		{
			if(L->r[min]>L->r[j])
				min=j;
		}
		if(i!=min)
			swap(L,i,min);
	}
}

int main()
{
	SqList L;
	int k;
	L.lenght=10;
	int temp[10] ={0,9,1,5,8,3,7,4,6,2};
	memcpy(L.r, temp, 10*sizeof(int));
	printf("氣泡排序前:"); 
	for(k=1;k<10;k++)
		printf("%d,",L.r[k]);
	printf("\n");
	//L.r[10]={0,9,1,5,8,3,7,4,6,2};
	BubbleSort(&L);
	printf("氣泡排序後:"); 
	for(k=1;k<10;k++)
		printf("%d,",L.r[k]);
	printf("\n");
	memcpy(L.r, temp, 10*sizeof(int));
	printf("簡單選擇排序前:"); 
	for(k=1;k<10;k++)
		printf("%d,",L.r[k]);
	printf("\n");
	//L.r[10]={0,9,1,5,8,3,7,4,6,2};
	SelectSort(&L);
	printf("簡單選擇排序後:"); 
	for(k=1;k<10;k++)
		printf("%d,",L.r[k]);
	printf("\n");
}


執行結果如圖所示。


【小問題:結構體中陣列賦值】

這裡待排序的記錄存在結構體中的一個數組中,在定義完結構體後,不能通過L.r[10]={0,9,1,5,8,3,7,4,6,2};對陣列進行賦值,會報錯,因為這樣的格式是在陣列定義的時候使用,陣列定義後,就不能再這樣賦值了,只能一個個下標去賦值;或者對陣列按指標操作,完成記憶體塊的賦值。這裡使用int temp[10] ={0,9,1,5,8,3,7,4,6,2};
memcpy(L.r, temp, 10*sizeof(int));這樣的方式進行賦值。

相關推薦

C語言實現氣泡排序簡單選擇排序

氣泡排序(Bubble Sort)的基本思想為兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。 其時間複雜度為O(n^2)。 簡單選擇排序(Simple Selection Sort)

C語言實現氣泡排序

  #include <stdio.h> #define MAX 11 int main(int argc, const char *argv[]) { int a[MAX] = {0}; int i, j, t; char ch; /*輸入資

排序 (2) -----簡單選擇排序氣泡排序

簡單選擇排序和氣泡排序 兩種方法都是每一趟找出最大(小)的他放在一個位置,下一趟不用去管這個位置,只是兩種方法採用的找的形式不一樣 1. 簡單選擇排序:固定位置與前(後)面的比較 例子:5 1 6 2 假如按從小到大排序 5:粗體標記表示 固定的位置 5:這種標記表示已經排好

C語言實現氣泡排序—2

隨機輸入N個數據(亂序),進行排序輸出 #include <stdio.h> int main(int argc, const char *argv[]) { int a[100] = {0}; int i, j, t; int n = 0; char

兩種簡單的陣列排序演算法:氣泡排序直接選擇排序(升序)

氣泡排序的基本思想是:面對一排資料,先從前往後兩兩比較,如果前一個數比後一個數大就交換兩者的順序,即第一個數和第二個數比,第二個數和第三個數比,……,倒數第二個數和最後一個數比,這樣一輪下來以後最大的數就排到最後;接著把除去最大的數的該組資料進行同樣的操作,直至

C語言實現氣泡排序演算法(升序)

總結: 1、氣泡排序有二種順序來排序的。有升序或者降序來進行氣泡排序(注意萬一在面試中,面試官有問到氣泡排序,要問清楚面試官是用什麼順序來進行氣泡排序的)這裡預設是用升序來進行排序的。 2、氣泡排序思路(第一層)是先從第一個數開始冒泡(對應陣列中的a[0]的值),然

C語言實現氣泡排序演算法------比較排序

Requirement:將一個無序陣列,按照遞增的順序進行排列1.核心思想將相鄰的兩個資料進行比較,較大的資料逐漸上移。第一次迴圈完成之後最大的數,將出現在最上面。2.具體實現#include <stdio.h>void BubbleSort(int testNu

氣泡排序(順序表)簡單選擇排序(單鏈表)

河南理工大學 16 學年—17學年第 1 學期 資料結構 實驗任務書 專業名稱:              實驗學時:    2     課程名稱:資料結構      任課教師:  翟海霞      實驗題目:     排序演算法實現與比較             實驗環境:    Visual C+

資料結構之---C語言實現氣泡排序

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

c語言實現氣泡排序

1 #include <stdio.h> 2 3 int main() 4 { 5 int i,j,tmp,a[8]={0}; 6 int len=sizeof(a)/sizeof(a[0]); 7 pri

封裝解構,集合,字典,內建函數簡單選擇排序相關知識及習題

byte efault 練習 索引 list() 運算符 sha pow(x 不存在 封裝 將多個值使用逗號分割,組合在一起本質上,返回一個元組,只是省掉了小括號python特有語法,被很多語言學習和借鑒 解構 把線性結構的元素解開,並順序的賦給其它變量左邊接納的變量數要和

直插,希爾,簡單選擇排序

直插,希爾,和簡單選擇排序   直接插入:直接插入排序是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。 時間複雜度:平均情況O(n^2) 最好情況O(n) 最壞情況O(n^2) 空間複雜度:O(1) 穩定

C語言實現列印檔名行號

直接printf 使用語句:printf("file: %s\tline: %d\r\n", __FILE__, __LINE__);   列印呼叫函式時的檔名和行號   定義函式的地方: void _LED_ON(const char

排序演算法(一)氣泡排序簡單選擇排序,直接插入排序,希爾排序

氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交

C語言實現服務端客戶端進行TCP通訊例項

 本文給出一個很實用的C語言實現的服務端和客戶端進行TCP通訊的小例子。具體實現上非常簡單,只是平時編寫類似程式,具體步驟經常忘記,還要總是查,暫且將其記下來,方便以後參考。 (1)客戶端程式,編寫一個檔案client.c,內容如下: #include <stdl

C語言實現16位32位按位元組反轉

32位反轉如下: void Rev32InByte( void *val ) { unsigned int v = *((unsigned int *)val) ; v = ((v & 0x000000FF) << 24)

七大內部排序演算法總結(插入排序、希爾排序氣泡排序簡單選擇排序、快速排序、歸併排序、堆排序

寫在前面:         排序是計算機程式設計中的一種重要操作,它的功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。因此排序掌握各種排序演算法非常重要。對下面介紹的各個排序,我們假定所有排序的關鍵字都是整數、對傳入函式的引數預設是已經檢查好了的。只

C語言實現只用加法減法實現兩個正整數的乘除運算

1、乘法a*b如下 #include<stdlib.h> #include<stdio.h> int main() { int a,b; int i,result=0; scanf("%d%d",a,b); for(

排序——直接選擇排序簡單選擇排序

無序 代碼 .... 插入排序 相對 方法 import 排序 color 直接選擇排序也稱簡單選擇排序,是一種相對簡單的排序算法,它的基本思想是:從一列數中找出最小的,和第一個交換;剩下的重新找出最小的,和這列數的第二個交換,......一直進行n-1次比較之後,該數列已

排序演算法--選擇排序簡單選擇排序

在待排序記錄中,選擇一個最小的數,和第一個記錄交換位置,在剩下n-1個的記錄中選擇最小的和第二個記錄交換,依次類推,最終可以得到一個有序的序列。 程式碼: #include <string.h> #include <malloc.h> #includ