1.冒泡排序:相邻的数比较,大的数放后面,每趟取得最大的数放在最后 - #include<stdio.h>
- int main(int argc, const char * argv[]) {
- //定义一个字符数组
- int a[10]={22,34,5,45,51,62,66,44,32,31};
- int temp;
- for(int i=0;i<10-1;i++){
- for(int j=0;j<10-1-i;j++){
- if(a[j]>a[j+1]){
- temp=a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
- }
- }
- }
- for (int i=0;i<10;i++){
- printf("%d\t",a[i]);
- }
- return 0;
- }
复制代码2.选择排序:每一个数跟后面的数比较,小的放到当前位置 - #include<stdio.h>
- int main(int argc, const char * argv[]) {
- //定义一个字符数组
- int a[10]={22,34,5,45,51,62,66,44,32,31};
- int temp;
- for(int i=0;i<10;i++){
- for(int j=i+1;j<10;j++){
- if(a[i]>a[j]){
- temp=a[j];
- a[j]=a[i];
- a[i]=temp;
- }
- }
- }
- for (int i=0;i<10;i++){
- printf("%d\t",a[i]);
- }
- return 0;
- }
复制代码第二种方式: - #include<stdio.h>
- int main(int argc, const char * argv[]) {
- //定义一个字符数组
- int a[10]={22,34,5,45,51,62,66,44,32,31};
- int min;
- int temp;
- for(int i=0;i<10;i++){
- min=i;//假设每次最小元素的下标是i;
- for(int j=i+1;j<10;j++){
- if(a[min]>a[j]){
- min=j;//找到最小元素的下标
- }
- }
- if(i!=min){//如果i=min不用交换,否则交换
- temp=a[min];
- a[min]=a[i];
- a[i]=temp;
- }
- }
- for (int i=0;i<10;i++){
- printf("%d\t",a[i]);
- }
- return 0;
- }
复制代码3.折半查找:在有序数组中查找一个值,思路:设置一个low=0;higt=length-1找中间的元素mid=(low+high)/2跟key值比较,如果key值>mid的值,high=mid-1,如果key值大于mid,那么low=mid+1;继续查找,直到相等 - //折半查找
- int key=51;
- int low=0,high=10-1;
- int mid=0;
-
- while(low<=high){
- mid=(low+high)/2;
- if(key<a[mid]){
- high=mid-1;
- }else if(key>a[mid]){
- low=mid+1;
- }else{
- printf("找到了%d",mid);
- break;
- }
- }
复制代码如果要插入一个数到有序数组中,那么返回的下标应该是low(查找不到的话,low的值比high的值大)
|