冒泡排序:(如升序)
在第一趟排序中,从第一个元素开始,扫描整个待排序元素序列,若相邻的两个元素逆序,则交换位置。直到最后一个元素,此时,最后一个元素必为最大的元素。
第二趟排序,依然从第一个元素开始扫描直到倒数第二个元素。
第三趟排序,从第一个扫描到倒数第三个。
......
直到只剩一个元素需要扫描。
程序如下:
#include<stdio.h> int main() { int arr[]={1,2,3,9,8,7,5,6,4}; int i=0; int j=0; int len=sizeof(arr)/sizeof(arr[0]); for(i=0;i<len;i++) { for(j=0;j<len-i;j++) { if(arr[j+1]<arr[j]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(i=0;i<len;i++) printf("%d ",arr[i]); return 0; }
简单快速排序:
第一趟排序,从第一个元素开始进行比较,选出整个序列中最小的元素,和第一个元素交换位置。
第二趟排序,从第二个元素开始比较,选出最小的,和第二个交换位置。
......
程序如下:
#include<stdio.h> int main() { int arr[]={1,2,3,9,8,7,5,6,4}; int i=0; int j=0; int k=0; for(i=0;i<sizeof(arr)/sizeof(arr[0])-1;i++) { k=i; for(j=i+1;j<sizeof(arr)/sizeof(arr[0]);j++) { if(arr[j]<arr[k]) k=j; } if(k!=i) { int temp=arr[i]; arr[i]=arr[k]; arr[k]=temp; } } for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++) printf("%d ",arr[i]); return 0; }
时间: 2024-12-28 21:04:09