常用的c語(yǔ)言排序算法主要有三種即冒泡法排序、選擇法排序、插入法排序。
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有秦都免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、冒泡排序冒泡排序:
是從第一個(gè)數(shù)開(kāi)始,依次往后比較,在滿足判斷條件下進(jìn)行交換。代碼實(shí)現(xiàn)(以升序排序?yàn)槔?/p>
#includestdio.hint main()
{
int array[20] = { 6,9,7,8,5,3,4,0,1,2 , 21,23, 18, 33, 28,29,38,26, 48,19};
int temp;
for (int i = 0; i 20; i++)
{//循環(huán)次數(shù)
for (int j = 0; j 20 - i-1; j++)
{
if (array[j] array[j+1])
{//前面一個(gè)數(shù)比后面的數(shù)小時(shí)發(fā)生交換
temp = array[j];
array[j] = array[j+1];
array[j + 1] = temp;
}
}
} //打印數(shù)組
for (int i = 0; i 20; i++)
printf("%2d", array[i]);
return 0;}
}
二、選擇排序以升序排序?yàn)槔?/p>
就是在指定下標(biāo)的數(shù)組元素往后(指定下標(biāo)的元素往往是從第一個(gè)元素開(kāi)始,然后依次往后),找出除指定下標(biāo)元素外的值與指定元素進(jìn)行對(duì)比,滿足條件就進(jìn)行交換。與冒泡排序的區(qū)別可以理解為冒泡排序是相鄰的兩個(gè)值對(duì)比,而選擇排序是遍歷數(shù)組,找出數(shù)組元素與指定的數(shù)組元素進(jìn)行對(duì)比。(以升序?yàn)槔?/p>
#includestdio.h
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp, index;
for (int i = 0; i 9; i++)
{
index = i;
for (int j = i; j 10; j++)
{
if (array[j] array[index])
index = j;
}
if(i != index)
{
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for(int i=0;i10:i++)
printf("%2d"array[i]);
return 0;
}
三、快速排序
是通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
void QuickSort(int* arr, int size)
{
int temp, i, j;
for(i = 1; i size; i++)
for(j=i; j0; j--)
{
if(arr[j] arr[j-1])
{
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
我親手寫(xiě)的。
#includestdio.h
#includestdlib.h
int get_len(char *);
void rp_last(char* , char* , char* );
int get_len(char* str)
{
if(str == NULL) return -1;
int i;
for(i=0;str[i];i++);
return i;
}
void rp_last(char *s,char *sub1,char *sub2){
int i,j;
int k;
int sLen;
int sub1Len;
int sub2Len;
sLen=get_len(s);
sub1Len=get_len(sub1);
sub2Len=get_len(sub2);
for(i=sLen-1;i=0;i--)
{
for(j=sub1Len-1,k=i;j=0k=0;j--,k--)
if(s[k]!=sub1[j]) break;
if(j0) break;
}
//printf("%d\n",i);
if(j=0)
printf("not found!\n");
else if(sub1Lensub2Len)
{
k=sub1Len-sub2Len;
for(j=i+1;s[j-k]=s[j];j++);
for(j=sub2Len-1;j=0;j--,i--)
s[i-k]=sub2[j];
}
else{
k=sub1Len-sub2Len;
s[k+sLen]='\0';
for(j=sLen-1;ji;j--)
s[j+k]=s[j];
for(j=sub2Len-1;j=0;j--,i--)
s[i+k]=sub2[j];
}
printf("result:%s\n",s);
return ;
}
void main()
{
char s[256];
char sub1[100];
char sub2[100];
printf("s :");gets(s);
printf("sub1:");gets(sub1);
printf("sub2:");gets(sub2);
rp_last(s,sub1,sub2);
return ;
}
經(jīng)典的兩個(gè)排序:
(1)選擇排序
#include stdio.h
main()
{
int a[5];
int i,j,k,t;
for (i=0;i5;i++)
scanf("%d",a[i]);
for (i=0;i4;i++)
{
k=i;
for(j=i+1;j5;j++)
if(a[k]a[j])
k=j;
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i5;i++)
printf("%3d",a[i]);
}
(2)冒泡排序
#include stdio.h
main()
{
int a[5];
int i,j,t;
for (i=0;i5;i++)
scanf("%d",a[i]);
for (i=0;i4;i++)
for(j=0;j4-i;j++)
{
if(a[j]a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for (i=0;i5;i++)
printf("%3d",a[i]);
}
#include?stdio.h
void?sort(int?a[],?int?n)?{//選擇排序
int?i,j,k,t;
for(i?=?0;?i??n?-?1;?++i)?{
k?=?i;
for(j?=?k?+?1;?j??n;?++j)?{
if(a[k]??a[j])?k?=?j;
}
if(k?!=?i)?{
t?=?a[i];
a[i]?=?a[k];
a[k]?=?t;
}
}
}
int?main()?{
int?a[]?=?{21,16,30,21,8,19,33,26,28,27,24,50,13,12};
int?i,n?=?sizeof(a)/sizeof(a[0]);
printf("排序前:\n");
for(i?=?0;?i??n;?++i)
printf("%d?",a[i]);
printf("\n");
sort(a,n);
printf("排序后:\n");
for(i?=?0;?i??n;?++i)
printf("%d?",a[i]);
printf("\n");
return?0;
}
#includestdio.h
int?main()
{?void?sort(int?array[],int?n);
int?a[100],n,i;
scanf("%d",n);
for(i=0;?in;?i++)
scanf("%d",a[i]);
sort(a,n);
printf("the?sorted?array:\n");
for(i=0;?in;?i++)
printf("%5d",a[i]);
printf("\n");
return?0;
}
void?sort(int?a[],int?n)
{?int?i,j,k,t;
for(i=0;?in-1;?i++)
{?k=i;
for(j=i+1;?jn;?j++)
if(a[j]a[k])
k=j;
t=a[k];
a[k]=a[i];
a[i]=t;
}
}