C語言 字串泡沫排序

Mars
各位前輩好,問題如下
設計一個選單讓使用者選擇
(1) 泡沫排序法
(2) 選擇排序法
(3) 插入排序法
任意輸入6個數字,將字串(字元陣列)``由大到小做排序並將每次排序的結果輸出
小弟輸入字串後,選擇排序方式就錯了
懇請各位大大指錯,謝謝




#include"stdio.h"
#include"string.h"
#define N 40
#define M 128

int main(){
	char data[N][M],key[N];
	int i,j,pos,op,n = 6;
	for(i=0;i<n;i++){
		scanf("%s",&data[i]);
 }
	while(1){
		scanf("%d",&op);
		switch(op){
			case 1:
				for(i=n; i>1; i--){
					for(j=0; j<i-1; j++){
						if(strcmp(data[j+1],data[j])<0)
						{
						swap(b,j+1, j);
							}
						}
						print(n, data);
					}
				print(n, data);
				break;
			case 2:
				for(i=0; i<n-1; i++){
					pos = i;
					for(j=i+1; j<n; j++){ // 找出最小值//
					if(strcmp(data[j],data[pos])<0)
					pos = j;
						}	
					// 把最小值跟第i 個做交換
					swap(&data[i], &data[pos]);
					print(n, data);
					}
					print(n, data);
				break;
			case 3:
				for( i=1; i<n; i++){
					strcpy(key,data[i]);
					for(j=i-1; j>=0 && data[j]>key; j--){
						strcpy(data[j+1] , data[j]);
						}
					strcpy(data[j+1] , key);//將key插入//
					print(n, data); 
					}
					print(n, data);
				break;
		}
		return 0;
	}
}

void swap(,char *a, char *b){
	char temp[8][128];
	temp = *a;
	*a = *b;
	*b = temp;
}
void print(int n, char *p[][128]){
	int i;
	for(i=0; i<n; i++){
	printf("%s ", p[i]);
	}
	printf("\n");
}

Mars
已自行解出,感謝
#include"stdio.h"
#include"string.h"
#define N 40
#define M 128
int main(){
	char data[N][M]={0},key[40];
	int i,j,pos,op,n = 6;
	for(i=0;i<n;i++){
		scanf("%s",&data[i]);
		}
	while(1){
		scanf("%d",&op);
		switch(op){
			case 1:
				for(i=n; i>1; i--){
					for(j=0; j<i-1; j++){
						if(strcmp(data[j+1],data[j])>0)
						{
						swap(&data[j+1], &data[j]);
							}
						}
						print(n,data);
					}
				print(n,data);
				break;
			case 2:
				for(i=0; i<n-1; i++){
					pos = i;
					for(j=i+1; j<n; j++){ // 找出最小值//
					if(strcmp(data[j],data[pos])>0)
					pos = j;
						}	
					// 把最小值跟第i 個做交換
					swap(&data[i], &data[pos]);
					print(n,data);
					}
					print(n,data);
				break;
			case 3:
				for( i=1; i<n; i++){
					strcpy(key,data[i]);
					for(j=i-1; j>=0 && strcmp(data[j],key)<0; j--){
						strcpy(data[j+1] , data[j]);
						}
					strcpy(data[j+1] , key);//將key插入//
					print(n,data); 
					}
					print(n,data);
				break;
		}
		return 0;
	}
}

void swap(char *a, char *b){
	char temp[M];
	strcpy(temp,a);
	strcpy(a,b);
	strcpy(b,temp);
}
void print(int n,char p[][128]){
	int i,j;
	for(i=0; i<n; i++){
		printf("%s ", p[i]);
	}
	printf("\n");
}

回到頂部