简单快速排序

最近,开始认真学习算法,为了更好的督促自己学习,也请大家帮忙监督,所以列了出来,欢迎批评指正。

第一个是选择排序

选择排序的基本思想是:设有N个元素要排序,首先选择最大的元素与第一个元素交换,然后再对剩余的N-1个元素进行类似处理,这样重复N-1次后,即可将N个元素按由大到小的顺序排列。若由小到大排序,只需每次选择最小元素。
具体代码如下:

 1 #include "Stdio.h"
 2 #define N 3
 3  void main(void)
 4 {
 5 int temp,i,j;
 6 int arr[N];
 7 for(i=0;i<N;i++)      /* 从键盘上输入3个数 */ 
 8 scanf("%d",&arr[i]);
 9 for(j=0;j<N-1;j++)    /* 3个元素选择2遍 */
10   {
11   for(i=j+1;i<N;i++)  /* 没遍进行3-(i+1)次 */
12   {
13     if(arr[i]>arr[j])    /* 把arr[j]当做最大数进行比较 */
14     temp=arr[i];
15     arr[i]=arr[j];
16     arr[j]=temp;
17   }
18   }
19   for(i=0;i<N;i++)
20 {
21   printf("%8d
",arr[i]); 
22 }   
23 scanf("%d",&temp);
24 }

算法改进:事实上,执行元素的交换并不都是必须的,只要记住比较时大元素的位置,即序号即可,在内循环结束后做一次交换即可,从而提高程序的执行效率。

代码如下:

1 #include "Stdio.h"
 2 #define N 3
 3  void main(void)
 4 {
 5 int temp,i,j,k;
 6 int arr[N];
 7 for(i=0;i<N;i++)      /* 从键盘上输入3个数 */ 
 8 scanf("%d",&arr[i]);
 9 for(j=0;j<N-1;j++)    /* 3个元素选择2遍 */
10   {k=i;
11   for(i=j+1;i<N;i++)  
12   { if(a[k]<a[j]) k=j;/* 记住新大元素的序号 */
13     if(k!=i)   
14    { temp=arr[i];
15     arr[i]=arr[j];
16     arr[j]=temp;}
17   }
18   }
19   for(i=0;i<N;i++)
20 {
21   printf("%d
",arr[i]); 
22 }   
23 scanf("%d",&temp);
24 }
原文地址:https://www.cnblogs.com/hzko5114/p/3496032.html