一.選擇排序法
基本思路:第一遍歷遍數(shù)組的每一個值,找出最大數(shù)放在首位拷呆;
第二遍歷遍數(shù)組的n-1個值闲坎,找出最大數(shù)放在數(shù)組的第二位;
茬斧。
腰懂。
。
项秉。
直到排序完成
實現(xiàn)方法:1.默認數(shù)組的第一個數(shù)為最大值
- 將剩余的數(shù)與該最大值比較 若 大于該最大值绣溜,則交換數(shù)組元素。
這樣歷遍數(shù)組后便可找到最大值并賦值給a[0];
第二次歷遍數(shù)組除a[0]外的所有值找到最大值娄蔼,并賦值給a[1]
如此反復
int a[10] = { 0,4,3,2,5,6,8,7,9,1 };
for (int i = 0; i < 10; i++) {
for (int j = i+1; j < 10; j++) {
if (a[i] < a[j]) {
int t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
for (int i = 0; i < 10; i++)
printf("%d ", s[i]);
二. 冒泡排序法
基本思路:第一次歷遍數(shù)組所有數(shù)怖喻,將每相鄰的進行兩兩比較,將較大的放在較小的后面岁诉,這樣在第一次歷遍數(shù)組后锚沸,在數(shù)組最后的一個數(shù)即為最大值;
第二次歷遍數(shù)組除最后一個值以外的所有數(shù)涕癣,將每相鄰的進行兩兩比較哗蜈,將較大的放在較小的后面,這樣在第一次歷遍數(shù)組后坠韩,在數(shù)組倒數(shù)第二個數(shù)即為新的最大值距潘;
。
只搁。
绽昼。
直到排序完成
實現(xiàn)方法:1.將數(shù)組兩兩進行比較,若后者小于前者须蜗,則將他們的值交換硅确;
2 注意:在冒泡排序法中目溉,由于需要進行兩兩比較 故到進行到數(shù)組的最后一個值時,不能再進行兩兩比較菱农;
int s[10] = { 0,4,3,2,5,6,8,7,9,1 };
for (int i = 0; i <9; i++) {
for (int j = 0; j < 9 - i; j++) {
if (s[j] > s[j + 1])
{
int t =s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
}
}
for (int i = 0; i < 10; i++)
printf("%d ", s[i]);
三.插入排序法
基本思路:從數(shù)組的第二個值開始(第一個值默認已經(jīng)排好序)與前面的每一個值進行比較缭付,若小于前面的值,則將前面的值向后挪一位循未,空出一個位置準備迎接即將到來的新數(shù)字陷猫,但大于前面的值時,則停止比較 并將該值插入空出的位置的妖;
注意:由于數(shù)字后挪 所以要定義一個監(jiān)視哨來保存需要插入的數(shù)绣檬;
實現(xiàn)方法:代碼如下:
int array[10]= { 0,4,3,2,5,6,8,7,9,1 };
for (int i = 1; i < 10; i++) {//從第一個數(shù)開始向前比較;
int j = i - 1;//找到需要比較的最右邊一個數(shù)的數(shù)字下標嫂粟;
int temp = array[i];//監(jiān)視哨
while (array[j] > temp) {
array[j + 1] = array[j];
j--;
}
array[j+1] = temp;
}
for (int i = 0; i < 10; i++)
printf("%d ", array[i]);
三者的比較:1.相同點:都是通過兩兩比較個位置的數(shù)值大小來確定位置
2.不同點:選擇排序法是通過確定一個值與剩下的所有值進行比較找到最大值(最小值)放入頭部(尾部)娇未;
冒泡排序法是通過每相鄰的兩個數(shù)比較 將較大的往下“沉”,找到最大值(最小值);
插入排序法是先默認第一個數(shù)已經(jīng)排好序星虹,從第二個數(shù)開始與前面的每一個數(shù)進行比較零抬,找到一個插入點——插入的數(shù)比該點前面的數(shù)大同時比后面的數(shù)小。