排序算法總結(jié)
#include <stdio.h>
每一輪都會選出一個(gè)最大的數(shù)據(jù)放在隊(duì)列后面,但是它不能保證之前的數(shù)據(jù)是有序的,所以下一次循環(huán)還是要從第一個(gè)元素開始進(jìn)行比較,而且是相鄰兩個(gè)元素兩兩比較
void bubleSort(int *b, int c)
{
??? int i=0,j=0,m=0;
??? for(i=0;i<c;i++)
??? {
??????? for(j=0;j<c-1;j++)
??????? {
??????????? if(b[j]>b[j+1])
??????????? {
??????????????? m=b[j];
??????????????? b[j]=b[j+1];
??????????????? b[j+1]=m;
??????????? }
??????? }
??? }
}
1、數(shù)據(jù)交換發(fā)生在m和i之間,不一定相鄰
2、每一輪都會選出無序數(shù)據(jù)中最小的數(shù)據(jù)放在最前面開始形成有序隊(duì)列,因此下一次選出的數(shù)據(jù)應(yīng)當(dāng)是次最小,所以應(yīng)當(dāng)在下一輪排序中將已經(jīng)有序的元素排除在外
void selectSort(int *b, int c)
{
??? int i=0,j=0,m=0,n=0;
?? ?
??? for(i=0;i<c;i++)
??? {
??????? m=i;
??????? for(j=i+1;j<c&&(b[j]<b[m]);j++)
??????? {
??????????? m=j;
??????? }
??????? n=b[i];
??????? b[i]=b[m];
??????? b[m]=n;
??? }
}
選出第i個(gè)元素插入有序隊(duì)列,而第i個(gè)元素之前的數(shù)據(jù)都是有序的,因此應(yīng)當(dāng)拿第i個(gè)元素與之前的數(shù)據(jù)挨個(gè)對比,符合條件的就兩兩交換數(shù)據(jù)
void insertSort(int *b,int c)
{
??? int i=0,j=0,m=0;
??? for(i=0;i<c;i++)
??? {
??????? m=b[i];
??????? for(j=i;j>0&&(b[j-1]>m),j--)
??????? {
??????????? b[j]=b[j-1];
??????? }
??????? b[j]=m;
??? }
}