天天看點

直接選擇排序算法和冒泡排序算法的介紹及實作

(1)直接選擇排序(VS2013)

直接選擇排序是一種比較簡單的排序方法,它的排序過程為:先從待排序的所有記錄中選出關鍵字最小的記錄,把它與原始序列中的第一個記錄交換位置;然後再從去掉了關鍵字最小的記錄的剩餘記錄中選出關鍵字最小的記錄,把它與原始序列中第二個記錄交換位置;以此類推,直至所有記錄成為有序序列。

實作代碼如下:

</pre><pre name="code" class="cpp">#include "stdafx.h"

#include <iostream>
using namespace std;

/*直接選擇排序*/

int _tmain(int argc, _TCHAR* argv[])
{
	int a[10];
	int n = 10;        //序列個數(可以自己任意輸入)
	for (int i = 0; i < 10; i++)  //輸入原始數組
	{
		cin >> a[i];
	}
	for (int i = 0; i < 10 - 1; i++)    //進行n-1趟排序
	{ 
		int k = i;
		for (int j = i + 1; j < 10; j++)
		{
			if (a[k]>a[j])
				k = j;   //找到待排序列中關鍵字最小的記錄
		}
		if (k != i)     //把最小記錄和原始序列中的第一個記錄交換位置
		{
			int temp = a[i];
			a[i] = a[k];
			a[k] = temp;
		}
	}
	cout << "after sorting:" << endl;
	for (int i = 0; i < 10; i++)            //輸出由小到大排序後的序列
		cout << a[i] << " "; 
	cout << endl;
	return 0;
}
           

(2)冒泡排序(VS2013)

冒泡排序又稱為起泡排序,它也是一種簡單常用的排序方法。其基本思想是通過相鄰記錄之間的關鍵字的比較和交換,使關鍵字較小的記錄逐漸從底部移向頂部,即下标較大的單元移向下标較小的單元,就像水底下的氣泡一樣逐漸向上冒;而關鍵字較大的記錄就像石塊一樣往下沉,每一趟排序有一塊“最大”的石頭沉到水底。

排序過程:現将第1個記錄和第2個記錄進行比較,若為逆序,則交換之;接着比較第2個記錄和第3個記錄;以此類推,直至第n-1個記錄和第n個記錄進行比較、交換為止,我們稱這樣的過程為一趟冒泡排序。如此經過一趟排序,關鍵字最大的記錄被安置到最後一個記錄的位置上。然後,對前n-1個記錄進行同樣的操作,使具有次大關鍵字的記錄被安置在第n-1個記錄的位置上。重複以上過程,直到沒有記錄需要交換為止。

實作代碼如下:

#include "stdafx.h"

#include <iostream>
using namespace std;

/*冒泡排序*/

int _tmain(int argc, _TCHAR* argv[])
{
	int a[10];
	for (int i = 0; i < 10; i++)       //輸入原始數組
		cin >> a[i];
	for (int i = 0; i < 10 - 1; i++) 
	{
		for (int j = 0; j < 10 - 1 - i; j++)       
		{
			if (a[j]>a[j + 1])        //相鄰記錄之間比較,大的元素往下沉
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	cout << "after sorting:" << endl;       //輸出由小到大排序後的序列
	for (int i = 0; i < 10; i++)
		cout << a[i] << " ";
	cout << endl;
	return 0;
}